Arbeiten mit Mysql

Anfängerfragen zum Programmieren mit PureBasic.
Rene-RNI
Beiträge: 18
Registriert: 10.09.2013 14:32

Arbeiten mit Mysql

Beitrag 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
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Arbeiten mit Mysql

Beitrag 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
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Rene-RNI
Beiträge: 18
Registriert: 10.09.2013 14:32

Re: Arbeiten mit Mysql

Beitrag 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
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Arbeiten mit Mysql

Beitrag 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
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Rene-RNI
Beiträge: 18
Registriert: 10.09.2013 14:32

Re: Arbeiten mit Mysql

Beitrag von Rene-RNI »

Danke dir, klappr wunderbar, bis auf

DatabaseQuery(#DatenDB, "SELECT last_insert_rowid()")

Das eintragen funtioniert einwandfrei

Gruß Rene
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Arbeiten mit Mysql

Beitrag 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
a²+b²=mc²
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Arbeiten mit Mysql

Beitrag 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?

Code: Alles auswählen

Select count(*) from tabelle
--
Kiffi hat sich vorgedrängelt :)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
SirMatti74
Beiträge: 37
Registriert: 08.11.2009 09:12

Re: Arbeiten mit Mysql

Beitrag von SirMatti74 »

Bei MySQL lautet die gesuchte Abfrage

Code: Alles auswählen

SELECT LAST_INSERT_ID();
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;
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Arbeiten mit Mysql

Beitrag 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)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Rene-RNI
Beiträge: 18
Registriert: 10.09.2013 14:32

Re: Arbeiten mit Mysql

Beitrag 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?
Antworten