Entwickler-Ecke
Datenbanken - Datenbank mit SQL oder nicht?
Ebil - So 29.06.08 20:53
Titel: Datenbank mit SQL oder nicht?
Hi leute,
Ich sitze grad an einer frage die mir schwierigkeiten bereitet, ich habe noch nie etwas mit datenbanken gemacht.
Ich schreibe ein programm das daten aus einem text file ausliest.
Eine zeile der "datenbank" sieht zb so aus.
Quelltext
1:
| ID,Sprite_Name,kROName,iROName,LV,HP,SP,EXP,JEXP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Mode,Speed,aDelay,aMotion,dMotion,MEXP,ExpPer,MVP1id,MVP1per,MVP2id,MVP2per,MVP3id,MVP3per,Drop1id,Drop1per,Drop2id,Drop2per,Drop3id,Drop3per,Drop4id,Drop4per,Drop5id,Drop5per,Drop6id,Drop6per,Drop7id,Drop7per,Drop8id,Drop8per,Drop9id,Drop9per,DropCardid,DropCardper |
Dort stehen dann halt die jeweiligen werte, anstatt nun die bezeichnung.
Ich splitte den string anhand jedes "," und lese dann die einzelnen werte aus.
Nun ist mir eingefallen das es das ganze auch als SQL tables gibt
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:
| DROP TABLE IF EXISTS `mob_db`; CREATE TABLE `mob_db` ( `ID` mediumint(9) unsigned NOT NULL default '0', `Sprite` text NOT NULL, `kName` text NOT NULL, `iName` text NOT NULL, `LV` tinyint(6) unsigned NOT NULL default '0', `HP` int(9) unsigned NOT NULL default '0', `SP` mediumint(9) unsigned NOT NULL default '0', `EXP` mediumint(9) unsigned NOT NULL default '0', `JEXP` mediumint(9) unsigned NOT NULL default '0', `Range1` tinyint(4) unsigned NOT NULL default '0', `ATK1` smallint(6) unsigned NOT NULL default '0', `ATK2` smallint(6) unsigned NOT NULL default '0', `DEF` smallint(6) unsigned NOT NULL default '0', `MDEF` smallint(6) unsigned NOT NULL default '0', `STR` tinyint(4) unsigned NOT NULL default '0', `AGI` tinyint(4) unsigned NOT NULL default '0', `VIT` tinyint(4) unsigned NOT NULL default '0', `INT` tinyint(4) unsigned NOT NULL default '0', `DEX` tinyint(4) unsigned NOT NULL default '0', `LUK` tinyint(4) unsigned NOT NULL default '0', `Range2` tinyint(4) unsigned NOT NULL default '0', `Range3` tinyint(4) unsigned NOT NULL default '0', `Scale` tinyint(4) unsigned NOT NULL default '0', `Race` tinyint(4) unsigned NOT NULL default '0', `Element` tinyint(4) unsigned NOT NULL default '0', `Mode` smallint(6) unsigned NOT NULL default '0', `Speed` smallint(6) unsigned NOT NULL default '0', `aDelay` smallint(6) unsigned NOT NULL default '0', `aMotion` smallint(6) unsigned NOT NULL default '0', `dMotion` smallint(6) unsigned NOT NULL default '0', `MEXP` mediumint(9) unsigned NOT NULL default '0', `ExpPer` smallint(9) unsigned NOT NULL default '0', `MVP1id` smallint(9) unsigned NOT NULL default '0', `MVP1per` smallint(9) unsigned NOT NULL default '0', `MVP2id` smallint(9) unsigned NOT NULL default '0', `MVP2per` smallint(9) unsigned NOT NULL default '0', `MVP3id` smallint(9) unsigned NOT NULL default '0', `MVP3per` smallint(9) unsigned NOT NULL default '0', `Drop1id` smallint(9) unsigned NOT NULL default '0', `Drop1per` smallint(9) unsigned NOT NULL default '0', `Drop2id` smallint(9) unsigned NOT NULL default '0', `Drop2per` smallint(9) unsigned NOT NULL default '0', `Drop3id` smallint(9) unsigned NOT NULL default '0', `Drop3per` smallint(9) unsigned NOT NULL default '0', `Drop4id` smallint(9) unsigned NOT NULL default '0', `Drop4per` smallint(9) unsigned NOT NULL default '0', `Drop5id` smallint(9) unsigned NOT NULL default '0', `Drop5per` smallint(9) unsigned NOT NULL default '0', `Drop6id` smallint(9) unsigned NOT NULL default '0', `Drop6per` smallint(9) unsigned NOT NULL default '0', `Drop7id` smallint(9) unsigned NOT NULL default '0', `Drop7per` smallint(9) unsigned NOT NULL default '0', `Drop8id` smallint(9) unsigned NOT NULL default '0', `Drop8per` smallint(9) unsigned NOT NULL default '0', `Drop9id` smallint(9) unsigned NOT NULL default '0', `Drop9per` smallint(9) unsigned NOT NULL default '0', `DropCardid` smallint(9) unsigned NOT NULL default '0', `DropCardper` smallint(9) unsigned NOT NULL default '0', PRIMARY KEY (`ID`) ) TYPE=MyISAM; |
Ein eintrag sieht dann ca so aus:
SQL-Anweisung
1:
| REPLACE INTO `mob_db` VALUES (1011,'CHONCHON','Chonchon','Chonchon',4,67,0,5,4,1,10,13,10,0,1,10,4,5,12,2,10,12,0,4,24,0x181,200,1076,576,480,0,0,0,0,0,0,0,0,998,50,935,6500,909,1500,1205,55,601,100,742,5,1002,150,0,0,0,0,4009,1); |
Was würde sich nun mehr lohnen? Ist SQL schneller/ressoucensparender? Und wieviel aufwand wäre es das ganze umzuschreiben?
Und wie nutze ich SQL? Muss dafür extra eine datenbank noch neben dem programm laufen? Müssen sich meine User extra kram installieren?
Bin grad echt nachdenklich, war ziemlich viel arbeit son doofen string zu zerlegen, und dann noch die eigenschaften ( zb element = 1,2,3,4,5,6.... und das den "namen" der elemente zuordnen...), war viel arbeit, aber wenn SQL besser ist, und es keine umstände für die user macht ( Und ich das mit so ner datenbank hinkrieg), würd ich mir denke ich mal die mühe machen...
Also bitte um hilfe ^^
Ebil
Moderiert von
Klabautermann: Code-Tag hinzugefügt.
Klabautermann - Mo 30.06.08 12:06
Hi,
verstehe ich es richtig, momentan nutzt du noch Textdateien dafür?
In dem Fall währe eine Datenbank wahrscheinlich schneller, insbesondere dann, wenn es um große Datenmengen geht.
Eventuell hilft dir
das hier [
http://www.delphi-library.de/topic_Mit+tTable+amp+tQuery+Arbeiten_363.html] als kleiner Einstieg um die Komplexität des ganzen besser abschätzen zu können.
Gruß
Klabautermann
Ebil - Mo 30.06.08 12:41
Hai, danke für deine antwort.
Das sieht ja schomal gut aus, und auch einfacher als ich es mit ner txt im moment hab.
Es würden am ende merhere txt alle so um die 500kb sein, mit denen gearbeitet wird.
Aber eine frage hätte ich noch, ich hab ja die mysql tabelle eigentlich schon ( wie im ersten post geschrieben) wie erzeuge ich damit die datenbank auf die ich dann zugreife?
Das programm sollte auch zur laufzeit die tabelle aktualisieren, ist das möglich?
Ebil
Ebil - Mo 30.06.08 16:05
Habt ihr vllt ne schöne anleitung für sowas, BDE ist bei meinem delphi schon drin falls es wichtig ist, Firebird würd ich natürlich auch nehmen, mir isses eigentlich egal, denn ich stelle keine hohe anforderungen an die DB, hauptsache der User merkt nichts davon? MySQL kann ich im zusammenhang mit PHP schon, nur mit delphi nicht :/
mkinzler - Mo 30.06.08 17:16
Eine weitere skalierbare Lösung wäre FireBird (embedded)
Ebil - Mo 30.06.08 19:26
Oh gott, hab ausversehen mein alten post editiert ( so ist das wenn man 5 stunden weg is :D )
Der hier drüber:
"Habt ihr vllt ne schöne anleitung für sowas, BDE ist bei meinem delphi schon drin falls es wichtig ist, Firebird würd ich natürlich auch nehmen, mir isses eigentlich egal, denn ich stelle keine hohe anforderungen an die DB, hauptsache der User merkt nichts davon? MySQL kann ich im zusammenhang mit PHP schon, nur mit delphi nicht :/"
Sollte halt ne einfache datenbank sein, auch wenn es grad eins meiner größten projekte ist (für meine verhältnisse), kann man es nicht mit wirklich großen verlgeichen ^^
mkinzler - Mo 30.06.08 19:55
http://sourceforge.net/project/showfiles.php?group_id=9028
Bei der embedded-Variante brauchst du nur die Client-Dll(S) ins Programmverzeichnis kopieren. Durch Ändern des Connection-String kannst du dann auf einen installierten Server zugreifen.
Als Zugriffskomponenten kannst du IBX, Zeos, UIB, MDO, IBDAC, FIBPlus, ... verwenden
Als Admintool z.B. die PE von IBExpert
Ebil - Mo 30.06.08 20:58
Das wird schon wieder ziemlich kompliziert :/ ne anleitung wär nich übel.
Schon doof das man wieder so viele kompos brauch :/.
Ebil
Ebil - Mo 30.06.08 22:22
Von IBX find ich bei mir nix, und die tutorials kenn ich schon, leider kam ich damit nicht klar oder sie waren mir zu alt/hatte ne andere zusammenstellung.
Hab nun kompos für SQLite gefunden, sind mir leider auch zu alt von 2003, ich verstehs nich :D.
Find auch nix direkt für embedded datenbanken :/
hansa - Mo 30.06.08 23:02
Ebil hat folgendes geschrieben: |
| Von IBX find ich bei mir nix.. |
Das ist oben das "Interbase-Dingens".
Ebil hat folgendes geschrieben: |
| ..Find auch nix direkt für embedded datenbanken :/ |
Das gibts nicht.
mkinzler - Mo 30.06.08 23:31
Innerhalb der IDE heisst IBX z.B. Interbase Express oder Interbase.
Der Vorteil vin FB embedded ist es ja gerade, dass der Zugriff skalierbar ist. D.H der embedded-Zugriff unterscheidet sich nicht von dem Zugriff auf einen "Server"
Klabautermann - Di 01.07.08 16:31
Hi,
da fangen wir doch mal ganz langsam an:
Ebil Welche Delphi Version und Edition nutzt du?
Ebil - Di 01.07.08 16:57
Ich nutze delphi 2007 prof. aber trozdem find ich das interbase dingens nicht :/ Find nur BDE...
mkinzler - Di 01.07.08 19:05
s.Anhang
Ebil - Di 01.07.08 19:28
Ne sorry, gibts bei mir nicht, keine ahnung ob das normal ist ^^.
Also was bräuchte ich jetzt?
Sqlite?
dann noch Firebird (embedded?)
noch irgendwas?
mkinzler - Di 01.07.08 19:39
Ist das entsprechendes Package installiert?
Ebil - Di 01.07.08 20:59
Danke, war schon ganze zeit nach dem package auf der suche, habs nun installiert und hab auch die komponenten, was brauch ich nun noch für ne embedded db?
mkinzler - Di 01.07.08 21:41
-die embedded-Server-(Client-)Dll
-Admintool zum Erzeugen der DB und zum Testen
-auf dem Entwicklerrechner bietet sich die Installation des Servers an.
Ebil - Di 01.07.08 22:51
Mh, ich les grad das hier:
http://mseegernet.de/Delphi/FBEmbedded/FBEmbedded.htm
hört sich aber ziemlich kompliziert an...
Die dll hab ich, aber muss ich nun nen server auf meinen rechner einrichten?
Wie kann ich nun ne datenbank erstellen mit der dll und interbase?
mkinzler - Di 01.07.08 23:01
Am Besten mit einem Admin-Tool z.B. IBExpert (da gibt es eine kostenlose PE)
Der Zugriff auf die embedded Version unterscheidet sich nicht vom Zugriff auf einen Server ( nur Unterschied im Connection-String; keine Angabe eines Servers)
Ebil - Do 03.07.08 00:41
Hi leute,
Danke hab mir SQl manager und IBexpress runtergeladen, trozdem hab ich ein problem.
Ich will eine datenbank erstellen, anhand des von mir am anfang geposteten SQL codes, leider funktioniert es nicht, er bricht praktisch jede zeile mit einer fehlermeldung ab.
Zb bei:
Quelltext
1:
| ID mediumint(9) unsigned NOT NULL default '0', |
Fehlermeldung:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, char 15.
(.
ich meine, das is doch ganz normales SQL, ich hab sogar alle sonderzeichen ( ` ) und kommentare entfernt, da es immer ne fehlermeldung gab...
Trozdem klappt es nicht.
Und gibt es keine möglichkeit aus dem programm herraus über SQL eine datenbank zu erstellen? Das war meine eigentliche absicht, meine User sollen immer auf den aktuellsten stand sein, voll automatisch.
Ebil
hansa - Do 03.07.08 01:22
Ebil hat folgendes geschrieben: |
| Und gibt es keine möglichkeit aus dem programm herraus über SQL eine datenbank zu erstellen? Das war meine eigentliche absicht, meine User sollen immer auf den aktuellsten stand sein, voll automatisch. |
Was vollautomatisch ? :shock: Dein Programm soll also hellsehen, wenn ein neues Feld in eine Tabelle kommt und dann womöglich noch automatisch ein neues Edit-Feld an Glaskugel-Position in einem ganz bestimmten Formular einfügen ? Es soll auch wissen, was passiert, sofern OnExit etc. ausgeführt wird ? Und die EXE wird dann auch automatisch gepatcht, oder wie ? :mrgreen:
Ebil - Do 03.07.08 01:39
...
Voll automatisch im sinne von dem was ich programmiert habe.
Mein prog läd den SQL dump runter und updated anhand dessen die datenbank.
hansa - Do 03.07.08 01:53
Ja, und dann ? Dann ist ein Feld oder gar eine Tabelle neu da und das Programm weiß nichts davon ? Wozu das ? Je ne compris. :mrgreen: Entwerfe besser die DB gleich so, dass sie möglichst lange unverändert bleiben kann. Notfalls ein paar Dummy-Felder einbauen.
Ebil - Do 03.07.08 11:58
Du bist ja lustig o.O
Die DB muss so sein DAS sie ständig geändert werden kann, denn das ist in meinem prog. der große vorteil gegenüber den anderen =o.
//Edit, die tabelle hat immer den selben aufbau, natürlich weiss mein prog dann wozu... Schreib lieber nix wenn du dir nicht im geringsten vorstellen kannst was ich vorhab, oder einfach keine ahnung hast, mir egal =o.
Ebil - Do 03.07.08 12:31
Ich kenne die sql datentypen, ich programmiere auch in PHP.
Trozdem versteh ich nicht warums nicht klappt :/
Dann werd ich die sql datei wohl einfach wie meine alte txt nutzen müssen :/
mkinzler - Do 03.07.08 12:38
mediumint ist kein SQL-Datentyp. Das Create-Skript unterscheidet sich von DBMS zu DBMS.
Klabautermann - Do 03.07.08 13:15
Hi,
die verlinkte Beschreibung der Datentypen (erster Link) sollte nur Verdeutlichen wo das Problem liegt. Wenn du dir dise noch mal genauer anguckst siehst du z.B., dass der Datentyp, der in MySQL INT heißt in Access als INTEGER Bezeichnet wird und bei Oracle den Namen NUMBER trägt. Es kommt also auf dein verwendetes DBMS an. Die Structured Query Language wird von jeden nur ähnlich aber eben nicht Identisch implementiert, an reines ISO SQL halten dich die wenigsten.
Deshalb führt dich mein Zweiter Link auch zu einem PDF welches das von FireBird Verwendete SQL Beschreibt. Auf Seite 108 wird in diesem Dokument beschrieben, welche Datentypen dieses DBMS unter welchen Namen kennt.
Deine Aussage:
Ebil hat folgendes geschrieben: |
| Ich kenne die sql datentypen, ich programmiere auch in PHP. |
erhebt einen Absolutheitsanspruch der so nicht zu halten ist. Richtig müsste es heißen:
| Zitat: |
| Ich kenne die sql datentypen eines Dialektes, ich programmiere auch in PHP, dehalb ist es wahrscheinlich der von MySQL. |
Bitte nciht falsch verstehen, dass ganze hier ist in keiner Weise böse gemeint. Fakt ist nur, mit jedem neuen Datenbanksystem musst du dich auch wieder neu mit dessen Eigenheiten Vertraut machen.
Gruß
Klabautermann
Ebil - Do 03.07.08 13:23
Mh ok, das wusste ich nicht, und das ist irgendwie schlecht :/
Gibt es einen converter für sowas? Ansonsten muss ich mit meinen txt's weitermachen, leider, irgendwann werd ich so oder so datenbanken brauchen.
Ebil
mkinzler - Do 03.07.08 14:32
Du musst doch nur einmal durch das Skript gehen und die Typen usw. anpassen. Sollte ruckzuck erledigt sein.
Ebil - Do 03.07.08 17:09
MH... hab ich nun gemacht
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| CREATE TABLE mob_db ( ID integer(9) unsigned NOT NULL default '0', Sprite text NOT NULL, kName text NOT NULL, iName text NOT NULL, LV smallint(6) unsigned NOT NULL default '0', HP integer(9) unsigned NOT NULL default '0', SP INTEGER(9) unsigned NOT NULL default '0', EXP INTEGER(9) unsigned NOT NULL default '0', JEXP INTEGER(9) unsigned NOT NULL default '0', Range1 smallint(4) unsigned NOT NULL default '0', ATK1 smallint(6) unsigned NOT NULL default '0', ATK2 smallint(6) unsigned NOT NULL default '0', DEF smallint(6) unsigned NOT NULL default '0', MDEF smallint(6) unsigned NOT NULL default '0', STR smallint(4) unsigned NOT NULL default '0', AGI smallint(4) unsigned NOT NULL default '0', VIT smallint(4) unsigned NOT NULL default '0', INT smallint(4) unsigned NOT NULL default '0', DEX smallint(4) unsigned NOT NULL default '0', LUK smallint(4) unsigned NOT NULL default '0', Range2 smallint(4) unsigned NOT NULL default '0', Range3 smallint(4) unsigned NOT NULL default '0', Scale smallint(4) unsigned NOT NULL default '0', Race smallint(4) unsigned NOT NULL default '0', Element smallint(4) unsigned NOT NULL default '0', Mode smallint(6) unsigned NOT NULL default '0', Speed smallint(6) unsigned NOT NULL default '0', aDelay smallint(6) unsigned NOT NULL default '0', aMotion smallint(6) unsigned NOT NULL default '0', dMotion smallint(6) unsigned NOT NULL default '0', MEXP INTEGER(9) unsigned NOT NULL default '0', ExpPer smallint(9) unsigned NOT NULL default '0', MVP1id smallint(9) unsigned NOT NULL default '0', MVP1per smallint(9) unsigned NOT NULL default '0', MVP2id smallint(9) unsigned NOT NULL default '0', MVP2per smallint(9) unsigned NOT NULL default '0', MVP3id smallint(9) unsigned NOT NULL default '0', MVP3per smallint(9) unsigned NOT NULL default '0', Drop1id smallint(9) unsigned NOT NULL default '0', Drop1per smallint(9) unsigned NOT NULL default '0', Drop2id smallint(9) unsigned NOT NULL default '0', Drop2per smallint(9) unsigned NOT NULL default '0', Drop3id smallint(9) unsigned NOT NULL default '0', Drop3per smallint(9) unsigned NOT NULL default '0', Drop4id smallint(9) unsigned NOT NULL default '0', Drop4per smallint(9) unsigned NOT NULL default '0', Drop5id smallint(9) unsigned NOT NULL default '0', Drop5per smallint(9) unsigned NOT NULL default '0', Drop6id smallint(9) unsigned NOT NULL default '0', Drop6per smallint(9) unsigned NOT NULL default '0', Drop7id smallint(9) unsigned NOT NULL default '0', Drop7per smallint(9) unsigned NOT NULL default '0', Drop8id smallint(9) unsigned NOT NULL default '0', Drop8per smallint(9) unsigned NOT NULL default '0', Drop9id smallint(9) unsigned NOT NULL default '0', Drop9per smallint(9) unsigned NOT NULL default '0', DropCardid smallint(9) unsigned NOT NULL default '0', DropCardper smallint(9) unsigned NOT NULL default '0', PRIMARY KEY (ID) ) TYPE=MyISAM; |
Leider gibts den fehler schon bei der "(" nach dem Create Table...
Ich erstelle nun mal manuell die tabelle und schau ob der SQL manager einträge machen kann... das würd ja eig reichen.
//Edit: Gibt es keine eigenschaft die text heisst? o.O
Klabautermann - Do 03.07.08 17:15
Hallo,
Ebil hat folgendes geschrieben: |
Leider gibts den fehler schon bei der "(" nach dem Create Table...
Ich erstelle nun mal manuell die tabelle und schau ob der SQL manager einträge machen kann... das würd ja eig reichen. |
Sicher dass es die Klammer nach dem
CREATE TABLE ist? Nicht die nach dem
Integer? Denn bei dem ist keine Längenangabe nötig.
Text kannst du entweder als varcar machen oder wenn es beliebig langer Text sein soll als Blob Feld.
Gruß
Klabautermann
Ebil - Do 03.07.08 17:44
Ok... die tabelle hab ich schonmal erstellt, die kanna uch so bleiben, aber der inhalt der tabelle macht noch probleme.
Kennt der SQL manager kein REPLACE INTO? Was benutzt er anstatt das?
Musste schon ne ganze menge mehr ändern als die datentypen, leider, ist doch ziemlich verschieden das ganze ^^.
Naja solange ich mit delphi progs schreiben kann die den sql dump bearbeiten ist alles in ordnung, hoffe am ende krieg ichs hin...
bei REPLACE INTO gibts den fehler "? Invalid Statement"
Ebil
Klabautermann - Do 03.07.08 17:47
Hi,
entweder du nutzt
INSERT INTO um einen neuen Datensatz an zu legen oder
UPDATE um einen bestehenden zu ändern. Ein
REPLACE INTO ist mir um ehrlich zu sein völlig unbekannt.
//Edit: Achso:
| MySQL Handbuch hat folgendes geschrieben: |
| REPLACE is a MySQL extension to the SQL standard. It either inserts, or deletes and inserts. For another MySQL extension to standard SQL — that either inserts or updates — see Section 12.2.4.3, “INSERT ... ON DUPLICATE KEY UPDATE Syntax”. |
Gruß
Klabautermann
Ebil - Do 03.07.08 18:04
hab es nun mit Update und insert gemacht, warum beides? Ganz einfach, Ich finde die datensätze nicht, es sind 899 datensätze die in die mob_db eingetragen werden, aber wie kann ich die angucken?
Und was muss ich verwenden, execute SQL script oder execute Query?
Bei der query kommt ein fehler, da ein wert ein hex wert ist und der query das x stört (beispiel: 0x20A5). Muss ich daraus nen string (text, blob, varchar..) machen?
//Edit:
Unglaublich, ich habs doch noch geschafft, auch wenn der SQL dump extrem bearbeitet werden muss, für delphi hab ich die routine fast fertig geschrieben, damit sollte es dann immer klappen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!