Seite 1 von 2
Arbeiten mit Mysql
Verfasst: 13.09.2013 14:16
von Rene-RNI
Hallo, ich suche jetzt schon seit tagen eine einigermaßen aktuelle beschreibung zur verwendung von Mysql.
Alles was ich gefunden habe ist ziemlich alt und funtioniert so nicht mehr.
Kann mir jemand behilflich sein, wie ich Mysql verwende ohne ODBC, da die software bei einigen meiner Kollegen zum einsatz kommt.
Danke schon mal im voraus
Gruß Rene
Re: Arbeiten mit Mysql
Verfasst: 13.09.2013 14:22
von Bisonte
HeX0r hat im englischen Forum ein sehr interessantes Include vorgestellt, das die libmysql.dll benutzt
und dabei die Syntax von den PB eigenen Befehlen unterstützt.
Funktioniert bei mir unter Windows x86 und x64 sowohl im Ascii als auch im Unicode Kompilat.
(Wobei man aufpassen sollte, auch die richtige dll zu benutzen

)
Link :
http://purebasic.fr/english/viewtopic.p ... 28#p423628
Re: Arbeiten mit Mysql
Verfasst: 13.09.2013 14:39
von Rene-RNI
danke dir,
gibt es da irgend ein howto dazu?
habe zur zeit alles auf SQLite und will das umbauen auf Mysql
vor allem wo bekomme ich die richtige DLL
Gruß Rene
Re: Arbeiten mit Mysql
Verfasst: 13.09.2013 14:57
von Bisonte
die Dll's befinden sich in den MySQL Connector Zips, die man
hier bekommen kann.
Ein HowTo... eigentlich nicht, da es die gleichen Befehle nutzt wie PB.
Nur Blobs werden momentan nicht unterstützt.
SQLite und MySql benutzen beinahe die gleiche Syntax für die "Queries", im Grunde muss man dazu
dann nicht wirklich was umstellen.
Ausser vielleicht, aus DataBaseUpdate() ein DatabaseQuery() machen...
Dieses Beispiel hier um die Standard Datenbank von xampp anzusprechen/auszulesen...
Code: Alles auswählen
User.s = "root"
Pass.s = "password"
XIncludeFile "MySQL.pbi"
UseMySQLDataBase()
db = OpenDatabase(#PB_Any, "host=localhost dbname=cdcol", User, Pass, #PB_Database_MySQL)
If db
a = DatabaseQuery(DB, "SELECT * FROM `cds`")
If a
While NextDatabaseRow(db)
Debug GetDatabaseString(db,0)
Debug GetDatabaseString(db,1)
Debug GetDatabaseLong(db,2)
Debug GetDatabaseLong(db,3)
Wend
EndIf
CloseDatabase(db)
EndIf
Re: Arbeiten mit Mysql
Verfasst: 13.09.2013 15:39
von Rene-RNI
Danke dir, klappr wunderbar, bis auf
DatabaseQuery(#DatenDB, "SELECT last_insert_rowid()")
Das eintragen funtioniert einwandfrei
Gruß Rene
Re: Arbeiten mit Mysql
Verfasst: 13.09.2013 16:15
von Kiffi
last_insert_rowid() ist eine SQLite-spezifische Funktion und ist in MySQL nicht vorhanden-
Hierfür könntest Du alternativ sowas wie "Select Max(DeineID) From DeineTabelle" verwenden.
Google weiß da sicherlich mehr...
Grüße ... Kiffi
Re: Arbeiten mit Mysql
Verfasst: 13.09.2013 16:23
von bobobo
das sieht aus wie 'ne angeflanschte Prozedur oder Funktion ¿?
Rowid gibt es in Mysql so erstmal nicht.
Eine MySQL-Tabelle mit einem Index (autoincrementiert) auf einer IntegerSpalte
wäre sowas ähnliches, wenn auch nicht ganz dasselbe.
Was du suchst ist die Anzahl der Einträge in einer Tabelle?
--
Kiffi hat sich vorgedrängelt

Re: Arbeiten mit Mysql
Verfasst: 14.09.2013 00:44
von SirMatti74
Bei MySQL lautet die gesuchte Abfrage
Nachtrag:
Die Abfrage kann man auch direkt in Transaktionen verbauen - ideal wenn man 1:n-Relationen erzeugen will:
Tabelle1: ID (int, auto, Primarykey) | Daten (varchar)
Tabelle2: ID (int, auto, Primarykey) | Tabelle1_ID (int, Index) | Daten (varchar)
Relation: Tabelle1.ID - Tabelle2.Tabelle1_ID
Code: Alles auswählen
START TRANSACTION;
INSERT INTO Tabelle1(Daten) VALUES ("Bla");
SELECT @id:=LAST_INSERT_ID();
INSERT INTO Tabelle2(Tabelle1_ID,Daten) VALUES (@id,"Blabla");
INSERT INTO Tabelle2(Tabelle1_ID,Daten) VALUES (@id,"Blablablubb");
INSERT INTO Tabelle2(Tabelle1_ID,Daten) VALUES (@id,"La-li-lu");
...
...
...
COMMIT;
Re: Arbeiten mit Mysql
Verfasst: 16.09.2013 14:44
von bobobo
folgendes dazu noch aus der MySQL-Doku
LAST_INSERT_ID(), LAST_INSERT_ID(expr)
Gibt den ersten automatisch erzeugten Wert zurück, der für eine AUTO_INCREMENT-Spalte durch die aktuelle INSERT- oder UPDATE-Anweisung eingestellt wurde, die eine solche Spalte modifiziert hat.
mysql> SELECT LAST_INSERT_ID();
-> 195
Die erzeugte Kennung wird auf dem Server verbindungsspezifisch gehandhabt: Der von der Funktion an einen bestimmten Client zurückgegebene Wert ist der erste AUTO_INCREMENT-Wert, der für die zuletzt abgesetzte Anweisung, die eine AUTO_INCREMENT-Spalte betraf, von diesem Client erzeugt wurde. Dieser Wert darf nicht von anderen Clients bearbeitet werden, auch wenn diese selbst AUTO_INCREMENT-Werte erzeugen. Dieses Verhalten gewährleistet, dass jeder Client seine eigene Kennung abrufen kann, ohne die Aktivitäten anderer Clients berücksichtigen oder Sperren setzen bzw. Transaktionen verwenden zu müssen.
Der Wert von LAST_INSERT_ID() wird nicht geändert, wenn Sie die AUTO_INCREMENT-Spalte eines Datensatzes auf einen „nichtmagischen“ Wert (d. h. einen Wert, der nicht NULL und nicht 0 ist) setzen.
Wichtig: Wenn Sie mehrere Datensätze mithilfe einer einzelnen INSERT-Anweisung einfügen, gibt LAST_INSERT_ID() nur denjenigen Wert zurück, der für den ersten eingefügten Datensatz erzeugt wurde. Grund hierfür ist, dass es möglich sein soll, dieselbe INSERT-Anweisung problemlos auf einem anderen Server zu reproduzieren.
..
...
lull und lall
Geht also auch "nur" mit einer autoinkrementierten Spalte und ist somit eben NICHT identisch mit dem last_insert_rowid()
vom SQLite (RowID wie n SQLite gibt es bei MySQL nicht)
Re: Arbeiten mit Mysql
Verfasst: 24.09.2013 19:47
von Rene-RNI
ok, das ganze ahbe ich anders gelöst.
nun aber noch ein größeres Problem....
wenn ich das programm starten will, schlägt mein Virenscanner alarm, kann das an der libmysql.dll liegen?