freepascal, unit mysql

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
guennid

freepascal, unit mysql

Beitrag von guennid » 26.06.2008 16:23:59

Ich habe mir freepascal - ich glaube, nicht als deb, installiert - für etch gibts das wohl nicht und die von freepascal als deb angebotenen Pakete waren mindestens 10. Das war mir zu blöd.

Die im Betreff genannte unit habe ich nur als ppu. Es wäre natürlich schon einigermaßen hilfreich, wenn man wüsste, welche Prozeduren und Funktionen in der im Betreff genannten Unit drin stecken. Jemand eine Idee, wie ich das finde? Warum liefern die keinen Quellcode? Oder ist der hier irgendwo und ich weiß nicht wo?

Grüße, Günther

frapo
Beiträge: 18
Registriert: 24.03.2008 15:13:37
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: NRW

Re: freepascal, unit mysql

Beitrag von frapo » 27.06.2008 03:24:23

Doch, deb-Pakete gibt es sehr wohl für Etch. Beispielsweise ist fp-compiler der Paketname für den Compiler. Und wieso sind dir deb-Pakete zu blöd? Eigentlich sind doch gerade deb's sehr praktisch für Debianer :wink:

guennid

Re: freepascal, unit mysql

Beitrag von guennid » 27.06.2008 22:45:11

Es wäre schön, wenn du etwas zu meinen Fragen bezüglich der unit mysql sagen könntest.

Grüße, Günther

Benutzeravatar
neuss
Beiträge: 2165
Registriert: 06.11.2004 17:56:02
Lizenz eigener Beiträge: MIT Lizenz

Re: freepascal, unit mysql

Beitrag von neuss » 28.06.2008 00:15:26

Hallo,
guennid hat geschrieben:Warum liefern die keinen Quellcode? Oder ist der hier irgendwo und ich weiß nicht wo?
Bei http://sourceforge.net/project/showfile ... up_id=2174 ist er doch zu finden.

Des weiteren gibt es eine Dokumentation http://www.freepascal.org/docs.var
und eine Suche nach mysql bei denen http://community.freepascal.org:10000/s ... l&t=Search hat deutlich über 500 Treffer.

Also Günther, geb dir mal etwas mehr Mühe und heule hier nicht rum, wenn eine gut gemeinte Hilfe nicht deinen Erwartungen entspricht.

gruss neuss
stell dir vor, es geht, und keiner kriegt es hin.

guennid

Re: freepascal, unit mysql

Beitrag von guennid » 28.06.2008 22:20:48

Ach Neuss,
ich kann nicht sehen, wieso ich hier "geheult" hätte. Ich glaube ich habe eine ziemlich klare Frage gestellt, auf die ich keine Antwort bekommen habe. Wenn ich auf diese Frage nochmal (kommentarlos!) hinweise, kann ich das nicht als Heulen werten.
Ich habe nicht gesagt, dass mir debs zu blöd sind, sondern nur dass mir die Installation von ca.10 debs die nicht von debian stammen und von denen ich wenig bis nichts weiß, wofür die gut sind, zu blöd war.
Wenn du allerdings der Meinung bist, man dürfe hier nur in der Haltung der Proskynese Fragen stellen, dann werde ich das trotzdem nicht tun. threads die man nicht mag, kann man meiden!
Zur Sache:
Dass ich freepascal auch unter etch bekomme, habe ich nun mitgekriegt. Danke an frapo für den Hinweis.
Von deinem ersten Link habe ich mein pascal gezogen. Ich hab's nochmal gemacht und ich finde dort immer noch keinen Quelltext zur mysql-unit.
Der zweite Link war mir bekannt, von daher wusste ich, dass es die unit gibt.
Die 584 Links in der 3. Adresse habe ich nicht alle geprüft, die die ich mir angesehen habe, geben zu meinem Problem keine Auskunft. Einige (etwas angestaubte von 2002 - 2004) betonen, dass keine Doku existiert. Ich hoffe, wenigstens in die Nähe dessen gekommen zu sein, was du unter "ein wenig Mühe" verstehst.

Grüße, Günther

Benutzeravatar
neuss
Beiträge: 2165
Registriert: 06.11.2004 17:56:02
Lizenz eigener Beiträge: MIT Lizenz

Re: freepascal, unit mysql

Beitrag von neuss » 29.06.2008 00:40:32

Hallo,
guennid hat geschrieben:Von deinem ersten Link habe ich mein pascal gezogen. Ich hab's nochmal gemacht und ich finde dort immer noch keinen Quelltext zur mysql-unit.
Also wenn ich mir die Sourcen von dort ansehe, ist da der Ordner fpc-2.2.0/packages/base/mysql in dem alles zu finden ist.
guennid hat geschrieben:Die 584 Links in der 3. Adresse habe ich nicht alle geprüft, die die ich mir angesehen habe, geben zu meinem Problem keine Auskunft.
Ich finde diese Auskunft sehr hilfreich: http://community.freepascal.org:10000/b ... 086#149687
guennid hat geschrieben:Ich hoffe, wenigstens in die Nähe dessen gekommen zu sein, was du unter "ein wenig Mühe" verstehst.
Nehme es mir nicht böse, aber von jemanden der in einer bestimmten Sprache ein Datenbankfrontend schreiben möchte, erwarte ich halt mehr. Insbesondere wenn er schon so lange dabei ist wie du.

gruss neuss
stell dir vor, es geht, und keiner kriegt es hin.

guennid

Re: freepascal, unit mysql

Beitrag von guennid » 29.06.2008 08:47:15

Ich bin kein Insider. Ich hab's mehr mit Deutsch und Geschichte. Das Einzige, was ich edv-mäßig kann, ist pascal.
Ich hätte auf der sourceforge-Seite weiter nach unten scrollen sollen. Dort habe ich mittlerweile den gesamten Quellcode gefunden und dort scheint auch die Unit im Quellcode vorzuliegen. :wink:
Den von dir zuletzt genannten Ordner finde ich nicht. :oops: Wäre nett, wenn du mir den kompletten Pfad nennen könntest, ich möchte ihn trotzdem checken.
neuss hat geschrieben:Ich finde diese Auskunft sehr hilfreich: http://community.freepascal.org:10000/b ... 086#149687
. Ich weniger, wenn dort steht:
There is no pascal specific documentation. The mysql unit provides a simple translation to pascal of the C mysql.h header file. ...
... You can use any manual of MySQL to use the pascal unit. All calls are exactly as they are for the C programmers
Mal schauen, ob ich da durchsteige. Je näher ich mich mit mysql beschäftige, um so weniger gefällt mir das. - Aber ich glaube, ich habe keine andere Wahl.

Grüße, Günther

Benutzeravatar
neuss
Beiträge: 2165
Registriert: 06.11.2004 17:56:02
Lizenz eigener Beiträge: MIT Lizenz

Re: freepascal, unit mysql

Beitrag von neuss » 29.06.2008 11:21:31

guennid hat geschrieben:Den von dir zuletzt genannten Ordner finde ich nicht.
Zur Veranschaulichung habe ich mal sowohl fpc-2.2.0.source.tar.gz als auch fpcbuild-2.2.0.tar.gz entpackt.

Code: Alles auswählen

# find . -name mysql
./fpcbuild-2.2.0/fpcsrc/packages/base/mysql
./fpcbuild-2.2.0/fpcsrc/packages/fcl-db/src/sqldb/mysql
./fpc-2.2.0/packages/base/mysql
./fpc-2.2.0/packages/fcl-db/src/sqldb/mysql
Laut diff ist in Bezug auf MySQL kein Unterschied zwischen fpc und fpcbuild.
guennid hat geschrieben:
neuss hat geschrieben:Ich finde diese Auskunft sehr hilfreich: http://community.freepascal.org:10000/b ... 086#149687
Ich weniger, wenn dort steht: ...
Da ist aber auch noch ein Link, der dich unter anderem dorthin führt:
http://lazarus-ccr.sourceforge.net/inde ... _text_mode

gruss neuss
stell dir vor, es geht, und keiner kriegt es hin.

guennid

Re: freepascal, unit mysql

Beitrag von guennid » 29.06.2008 11:48:27

Code: Alles auswählen

 $(FreePascal_directory)/packages/base/mysql/
Sag mir doch einfach mal, wo ich dieses bescheuerte Verzeichnis finde! :twisted: :twisted: :twisted:

Grüße, Günther

Benutzeravatar
neuss
Beiträge: 2165
Registriert: 06.11.2004 17:56:02
Lizenz eigener Beiträge: MIT Lizenz

Re: freepascal, unit mysql

Beitrag von neuss » 29.06.2008 12:15:13

Steht doch schon in meinem letzten Post, sogar incl. Suchbefehl.
Wie hast du denn die Sourcen entpackt, vielleicht ist da ja schon was grundlegend falsch gelaufen.

Code: Alles auswählen

tar -xf fpc-2.2.0.source.tar.gz
gruss neuss
stell dir vor, es geht, und keiner kriegt es hin.

guennid

Re: freepascal, unit mysql

Beitrag von guennid » 29.06.2008 12:34:30

neuss hat geschrieben:Wie hast du denn die Sourcen entpackt, vielleicht ist da ja schon was grundlegend falsch gelaufen.
. Ich hab's jetzt gefunden: Ich habe mir 'n Wolf gesucht auf der homepage von frepascal. Ich habe nicht mitgekriegt, dass du den tar-ball meintest. :oops:
Entpackt habe ich die gar nichtmehr, ich will mir die nur anschauen, da ich davon ausgehe, dass meine ppus für's Entwickeln reichen. Aber ich muss natürlich wissen, was drin steht.

Darf ich dich weiter mit Fragen belästigen?
Meine mysql-Version ist 5.0.32. Sehe ich recht, dass ich die mysql-lib "libmysqlclient" irgendwie in fp bekanntmachen muss? Wie geht das?

Grüße, Günther

Benutzeravatar
neuss
Beiträge: 2165
Registriert: 06.11.2004 17:56:02
Lizenz eigener Beiträge: MIT Lizenz

Re: freepascal, unit mysql

Beitrag von neuss » 29.06.2008 14:13:10

guennid hat geschrieben:Darf ich dich weiter mit Fragen belästigen?
Das darfst du natürlich, aber ob ich dir bei Details weiterhelfen kann bezweifle ich. Ich verwende Free Pascal nicht, genau genommen habe ich seit 20 Jahren nichts mehr mit Pascal zu tun gehabt.
guennid hat geschrieben:Sehe ich recht, dass ich die mysql-lib "libmysqlclient" irgendwie in fp bekanntmachen muss? Wie geht das?
Da würde ich entsprechend, wie in dem von mir bereits oben erwähnten Link beschrieben vorgehen.
Für Etch sollte das dann,

Code: Alles auswählen

ln -s /usr/lib/libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so
lauten. Aber ob es damit funktioniert, musst du selbst probieren.

gruss neuss
stell dir vor, es geht, und keiner kriegt es hin.

guennid

Re: freepascal, unit mysql

Beitrag von guennid » 29.06.2008 17:18:40

Mann, Mann, das ist vielleicht ein Gewürge!!!

Code: Alles auswählen

CREATE DATABASE testdb;
then make sure that all relevant users have appropriate access privileges to it
GRANT ALL ON testdb TO johnny-user IDENTIFIED BY 'johnnyspassword'; 
There is a script called mkdb which you should now try to run:
sh ./mkdb
This will probably fail, as the system will not allow an anonymous user to access the database. So change the script using an editor so that the line invoking mysql reads:
mysql -u root -p  ${1-testdb} << EOF >/dev/null
and try running it again, entering your password when prompted. With luck you might have managed to create the test database: test it (while logged in to the mysql monitor) by issuing the mysql statement 
select * from FPdev;
You should see a table listing the ID, username and email address of some of the FPC developers.
Das meiste davon habe ich hinbekommen, nur nicht: "GRANT ALL ON testdb TO johnny-user IDENTIFIED BY 'johnnyspassword';" weder mit 1:1 abschreiben, noch durch Ersetzen von "johnny-user" nebst Passwort durch meinen mysql-root (einen anderen user habe ich nicht kreiert).
Links auf libmysqlclient.so.15.0.0 habe ich gesetzt, und zwar libmysqlclient und libmysqlclient.so. Der Pfad wurde in /etc/fpc.cfg aktiviert.

Bei
Now try to run the test program testdb.pp
ist Schluss. Das Ding lässt sich nicht kompilieren. Wenn ich die Unit mysql4 einbinde (ich habe doch 5.0.12?), dann kennt er einige Befehle weiter unten nicht, wenn ich mysql50 einbinde, kennt er den Typ "TMYSQL" nicht.

Das hier ließ sich immerhin kompilieren:

Code: Alles auswählen

PROGRAM mytest1;
USES CRT,mysql4;
VAR
  sock : PMYSQL;
  qmysql : TMYSQL;

BEGIN
mysql_init(PMYSQL(@qmysql));
sock := mysql_real_connect(PMYSQL(@qmysql),'localhost','[mysql-root-name]','[mysql-root-passwort]','buecher',0,'',0);
END.
Wobei ich wenig bis keine Ahnung habe, was ich da tue.

Grüße, Günther

Benutzeravatar
neuss
Beiträge: 2165
Registriert: 06.11.2004 17:56:02
Lizenz eigener Beiträge: MIT Lizenz

Re: freepascal, unit mysql

Beitrag von neuss » 30.06.2008 15:54:29

Es hat mir ja keine Ruhe gelassen, also habe ich es mal für dich durchprobiert.
guennid hat geschrieben:Das meiste davon habe ich hinbekommen, nur nicht: "GRANT ALL ON testdb TO johnny-user IDENTIFIED BY 'johnnyspassword';" weder mit 1:1 abschreiben, noch durch Ersetzen von "johnny-user" nebst Passwort durch meinen mysql-root (einen anderen user habe ich nicht kreiert).
johny-user muss wegen dem minus 'johny-user' geschrieben werden. Außerdem musst du vorher die Datenbank benutzen.

Code: Alles auswählen

mysql> USE testdb
Database changed
Zum testen habe ich einfach mal einen Benutzer ohne Passwort angelegt

Code: Alles auswählen

mysql> GRANT ALL ON testdb TO user IDENTIFIED BY '';
und in testdb4.pp diese Zeile geändert.

Code: Alles auswählen

// sock :=  mysql_real_connect(PMysql(@qmysql),nil,'michael','geen',nil,0,nil,0);
sock :=  mysql_real_connect(PMysql(@qmysql),nil,'user','',nil,0,nil,0);
Und siehe da, es lies sich mit ein paar Bemerkungen kompilieren und hat zumindest Teilfunktion.

Code: Alles auswählen

$ fpc testdb4.pp
Free Pascal Compiler version 2.2.0 [2007/09/01] for x86_64
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Linux for x86-64
Compiling testdb4.pp
testdb4.pp(11,3) Note: Local variable "count" not used
testdb4.pp(11,9) Note: Local variable "num" not used
testdb4.pp(12,3) Note: Local variable "code" not used
testdb4.pp(15,3) Note: Local variable "qbuf" not used
Linking testdb4
86 lines compiled, 0.3 sec
4 note(s) issued

$ ./testdb4
Connecting to MySQL...Done.
Connection data:
Mysql_port      : 3306
Mysql_unix_port : /var/run/mysqld/mysqld.sock
Host info       : Localhost via UNIX socket
Server info     : Uptime: 7040  Threads: 2  Questions: 456  Slow queries: 0  Opens: 251  Flush tables: 1  Open tables: 18  Queries per se5Client info     : 5.0.32
Selecting Database testdb...
Executing query : Select * from FPdev...
Query returned nil result.
gruss neuss
stell dir vor, es geht, und keiner kriegt es hin.

guennid

Re: freepascal, unit mysql

Beitrag von guennid » 30.06.2008 18:12:52

neuss hat geschrieben:Und siehe da, es ließ sich mit ein paar Bemerkungen kompilieren und hat zumindest Teilfunktion.
War bei mir heute morgen das Gleiche. - und ich wüsste nicht, was ich in der Zwischenzeit angerührt haben könnte :D
Egal. Ich denke, dass das funktioniert hat, bringt mich ein großes Stück weiter. Das erste Mal, dass ich etwas "wirklich" aus der mysql-Umgebung herausgeholt habe!!! :mrgreen: :hail:
neuss hat geschrieben:johny-user muss wegen dem minus 'johny-user' geschrieben werden
Du meinst, ich hätte die Anführungszeichen vergessen? Habe nochmal in der mysql-history nachgeschaut, war in der Tat so. Aber meinen Admin-Namen hätte er doch akzeptieren müssen (der enthält aber auch einen "Unter-Strich")?
Den "michael" habe ich auch geändert, versteht sich.

Von dem Befehl "GRANT" will ich aber nach Möglichkeit erstmal die Finger lassen, da der mir bei meinem jetzigen Kenntnistand gefährlich vorkommt. :wink:

Eine andere Frage:
In diesem Test-Programm wird der Typ "TMYSQL" benutzt. Ich habe nichts gefunden, wo der eigentlich vereinbart wird.

Benutzeravatar
neuss
Beiträge: 2165
Registriert: 06.11.2004 17:56:02
Lizenz eigener Beiträge: MIT Lizenz

Re: freepascal, unit mysql

Beitrag von neuss » 30.06.2008 19:54:52

guennid hat geschrieben:In diesem Test-Programm wird der Typ "TMYSQL" benutzt. Ich habe nichts gefunden, wo der eigentlich vereinbart wird.
Da hilft es die Sourcen zu durchsuchen, da du dies noch öfters tun musst daran als Beispiel,

Code: Alles auswählen

 $(FreePascal_directory)/packages/base/mysql/$ grep "TMYSQL =" *
mysql3types.inc:TMYSQL = st_mysql;
mysql4types.inc:  TMYSQL = st_mysql;

$(FreePascal_directory)/packages/base/mysql/$ grep "st_mysql =" *
mysql3types.inc:st_mysql = Record
mysql4types.inc:  Pst_mysql = ^st_mysql;
mysql4types.inc:  st_mysql = record
mysql.inc:       Pst_mysql = ^st_mysql;
mysql.inc:       st_mysql = record
st_mysql = record ist dann natürlich eine längere Geschichte, aber die wirst du ja finden.

Hier noch ein Link auf den ich heute gestossen bin und dir allgemein weiterhelfen könnte: http://wiki.freepascal.org/MySQLDatabases/de

PS
guennid hat geschrieben:Von dem Befehl "GRANT" will ich aber nach Möglichkeit erstmal die Finger lassen, da der mir bei meinem jetzigen Kenntnistand gefährlich vorkommt. :wink:
Tröste dich damit, daß der auch bei mir nicht sauber funktioniert hat. Nachdem ich den Benutzer gelöscht und mit mysql-admin neu erstellt habe, läuft testdb4 einwandfrei durch.
stell dir vor, es geht, und keiner kriegt es hin.

guennid

Re: freepascal, unit mysql

Beitrag von guennid » 01.07.2008 19:03:37

Ich glaube bisher von dem Beispielprogramm soviel für mich Relevantes verstanden zu haben:

Code: Alles auswählen

Query    : Pchar = 'Select * from FPdev';
Der mysql Befehl 'Select * from FPdev' wird einer damit initialisierten Pascal-Variablen als Zeichenkette übergeben

Code: Alles auswählen

mysql_query(sock,Query)
mysql_query() ist eine in mysql.inc vereinbarte Pascal-Funktion, über die der mysql-Befehl ausgeführt und das Ergebnis in der (komplexen) pascal-Variablen 'sock' eingelesen wird aus der es dann weiter unten wieder herausgeholt und auf den Bildschirm gezaubert wird.

Ist das einigermaßen korrekt interpretiert?

Meine nächste Frage wäre dann, wie man etwas in die Tabelle hineinbekommt. Bleiben wir einstweilen beim Ändern bereits bestehender Daten.
In Query müsste dann wohl sowas wie 'update ... set ... where ...'
Aber mit welchem Pendant zu mysql_query() kriegt man jetzt das Gewünschte in die Tabelle hinein?

Ich bin die Funktionköpfe in mysql.inc durchgegeangen und habe (wieder mal) nichts gefunden. Oder bin ich schon wieder auf einem Holzweg.

Grüße, Günther

Benutzeravatar
neuss
Beiträge: 2165
Registriert: 06.11.2004 17:56:02
Lizenz eigener Beiträge: MIT Lizenz

Re: freepascal, unit mysql

Beitrag von neuss » 02.07.2008 14:13:40

guennid hat geschrieben:...Ist das einigermaßen korrekt interpretiert?
Nein, mysql_query prüft in unserem Fall nur, ob auf die geöffnete Datenbank zugegriffen werden kann. sock ist die Variable der im Programm mysql_real_connect zugewiesen wurde.
Hier nochmal die Zuweisung für Pascal in allgemeiner Form,

Code: Alles auswählen

sock :=  mysql_real_connect(PMysql(@qmysql),'host','user','passwort','Datenbank',0,nil,0);
guennid hat geschrieben:Ich bin die Funktionköpfe in mysql.inc durchgegeangen und habe (wieder mal) nichts gefunden. Oder bin ich schon wieder auf einem Holzweg.
Die Pascal MySQL Unit ist doch nur eine Übersetzung von mysql.h, du verwendest also alles genauso wie in der MySQL-C-API beschrieben, nur das du den Code an Pascal anpassen musst.

gruss neuss
stell dir vor, es geht, und keiner kriegt es hin.

guennid

Re: freepascal, unit mysql

Beitrag von guennid » 05.07.2008 14:38:01

Ich will einen Datensatz anhängen und ein Feld füllen.
In der Form:

Code: Alles auswählen

myKomm := 'insert into FPdev (UserName) values (''guennid'')';
mysql_real_query(p1,PCHAR(myKomm),length(myKomm));
funktioniert das auch.
Was müsste die Variable myKomm aussehen, wenn ihr ich 'guennid' als Wert der Variablen name1 übergeben wollte?
Ich krieg das nicht gebacken,

so:

Code: Alles auswählen

VAR name1 : STRING;
...
name1 := 'guennid';
myKomm := 'insert into FPdev (UserName) values (name1)';
mysql_real_query(p1,PCHAR(myKomm),length(myKomm));
...[/code]
funktioniert's jedenfalls nicht.

Grüße, Günther

guennid

Re: freepascal, unit mysql

Beitrag von guennid » 06.07.2008 10:37:25

Ich habe eine Lösung gefunden:

Code: Alles auswählen

VAR
  myKommStr : STRING;
  myKomm : PCHAR;
  name1 : STRING;
...
name1 := '''guennid''';
myKommStr := 'insert into FPdev (UserName) values ('+name1+')'+#0;
myKomm := @myKommStr[1];
mysql_real_query(p1,PCHAR(myKomm),length(myKomm));
...
Ich habe noch nie was mit PCHAR zu tun gehabt :lol:

So richtig das Gelbe vom Ei ist das aber noch nicht, da ich dann wieder auf 255 Zeichen beschränkt bin und das dürfte kaum ausreichen.
Es müsste wohl über ein CHAR-Array laufen, aber wie ich da Text reinkriege und anschließend in PCHAR umwandle, weiß ich noch nicht.

Grüße, Günther

Antworten