![]() |
Re: MySQL ohne Komponenten
Ich hab mal noch eine frage, und zwar wenn ich die Thread ID ermitteln will, tue ich das doch mit 'mysql_thread_id()'.
Ich bin leider da noch nicht so ganz durchgestiegen welche Var muss ich jetzt deklarieren, und wie/wo ermittel ich die id? Ein Codebsp würde mir da mit sicherheit weiterhelfen, ich brauche ja nur erstmal den Ansatz. Danke Pemue Hat sich schon erledigt, ... |
Re: MySQL ohne Komponenten
So aber jetzt habe ich mal noch ein Anliegen:
und zwar beim auslesen der Spaltenüberschriften.
Delphi-Quellcode:
das ganze erstmal nur zu testzwecken... aber es wird immer nur 'id' ausgegeben, obwohl die spaltenüberschriften der Tabelle: 'id', 'author', 'date' und 'entry' sind...
var
_myFields: PMYSQL_FIELD; {...} begin {...} _myFields:= mysql_fetch_field(_myRes); ShowMessage(String(_myFields.name)); {...} end; Was mache ich falsch? |
Re: MySQL ohne Komponenten
Du liest ja auch immer nur den ersten Wert. Gibt es so etwas wie mysql_enumfields? Wenn ja, müsstest Du das aufrufen und in einer Schleife durch die Felder iterieren.
|
Re: MySQL ohne Komponenten
ja es gibt _type: enum_field_types im TMYSQL_FIELD = record.
aber wenn ich jetzt schreibe:
Delphi-Quellcode:
Dann kommt immer: 'Array-Typ erforderlich';for i := 0 to High(Posts) do begin _myFields:= mysql_fetch_field(_myRes); ShowMessage(_myFields._type[i]); end; aber wenn ich das array in der mysql.pas reinschreibe
Delphi-Quellcode:
sagt er mir 'bezeichner redifiniert'
TMYSQL_FIELD = array[0..MaxInt div SizeOf(pChar) - 1] of pChar;
|
Re: MySQL ohne Komponenten
Der Link zur Header-Übersetzung im ersten Post ist leider tot. Daher rate ich mal ins Blaue: wenn die Funktionen so heißen wie in PHP und auch so ähnlich arbeiten, kannst Du Folgendes einfach nach Delphi übersetzen (das Beispiel unten):
![]() |
Re: MySQL ohne Komponenten
Den Header kann man
![]() [EDIT:] also im header steht ja
Delphi-Quellcode:
nur leider weis ich mit diesem 'wild' nichts anzufangen
mysql_list_fields: function(_mysql: PMYSQL; const table, wild: pChar): PMYSQL_RES; stdcall;
ich habe jetzt folgenden code:
Delphi-Quellcode:
query := 'SHOW COLUMNS FROM posts';
mysql_real_query(_myCon, pchar(query), Length(query)); _myRes := mysql_list_fields(_mysql, 'posts', ); //alle Datensätze vom Server anfordern if _myRes = nil then begin ShowMessage('Es konnten keine Datensätze zurückgebenen werden. Ursache: ' + mysql_error(_myCon)); Exit; end; |
Re: MySQL ohne Komponenten
Ich kann das gerade hier nicht testen, da es schon beim mysql_init kracht. Mal sehen, ob ich heute Abend zu Hause etwas probieren kann.
|
Re: MySQL ohne Komponenten
dankeschön das währe echt nett von dir, vielen dank schonmal ich freu mich auf eine erfolgsversprechende antwort
|
Re: MySQL ohne Komponenten
Leute, was meint ihr denn, wozu MySQL die Schnittstellen der APIs beschreibt? Auf jeden Fall nicht, damit Leute rätselraten, was wohl bestimmte Parameter bedeuten ;-)
![]() |
Re: MySQL ohne Komponenten
Du kannst es ja mal so versuchen (ungetestet):
Delphi-Quellcode:
type TErgebnis = array of string;
var Ergebnis: TErgebnis; Row: PMySQL_Row; ... query := 'SHOW COLUMNS FROM posts'; mysql_real_query(_myCon, pchar(query), Length(query)); _myRes := mysql_store_result(_myCon); if _myRes = nil then begin ShowMessage('Es konnten keine Datensätze zurückgebenen werden. Ursache: ' + mysql_error(_myCon)); Exit; end; SetLength(Ergebnis, mysql_num_rows(_myRes)); for i := Low(Ergebnis) to High(Ergebnis) do begin Row := mysql_fetch_row(_myRes); Ergebnis[i] := Row[0]; //Name des Felds end; mysql_free_result(_myRes); SetLength(Ergebnis,0); |
Re: MySQL ohne Komponenten
So, das hat super funktioniert (ich nutze eine Listview zur Anzeige mit Namen lv1, vsReport mit 6 Spalten):
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var Con: PMYSQL; host, user, pass, db: PChar; Row: PMySQL_Row; Res: PMYSQL_RES; query: string; i,j: integer; Item: TListItem; begin host := 'localhost'; user := 'root'; pass := ''; db := 'dptest'; Con := mysql_init(nil); if Assigned(Con) then try if Assigned(mysql_real_connect(Con, host, user, pass, db, 3306, nil, 0)) then begin query := 'SHOW FIELDS FROM blubb'; mysql_real_query(Con,PChar(query), Length(query)); Res := mysql_store_result(Con); if Assigned(Res) then for i := 0 to mysql_num_rows(Res) - 1 do begin Row := mysql_fetch_row(Res); Item := lv1.Items.Add; Item.Caption := Row[0]; for j := 1 to mysql_num_fields(Res) - 1 do Item.SubItems.Add(Row[j]); end; end else ShowMessage(mysql_error(Con)); finally mysql_close(Con); end; end; |
Re: MySQL ohne Komponenten
Wo gibt es denn die aktuellen MySQL pas files und dlls die benoetigt werden?
|
Re: MySQL ohne Komponenten
Die DLLs liefert MySQL selbst mit (denke ich zumindest, ich habe sonst keine installiert) und die *.pas bekommst Du
![]() |
Re: MySQL ohne Komponenten
Habe mal noch eine Frage, speziell zum Typ 'ENUM'
und zwar wenn ich ein Auswahlfeld in die Tabelle machen will, schicke ich diese Query an den MySQL
Delphi-Quellcode:
Aber der Server nimmt diese Query nicht an, ich weis das es an der Text Formatierung des ENUM liegt, und evtl auch des Default wertes.
query := 'CREATE TABLE Auftrag (ID INT NOT NULL,Auftragsnummer INT, Kundennummer INT NOT NULL, BaustelleAnschrift TEXT, Rohranschlussmaterial TEXT, WinkelangabeInGon ENUM(''grad'', ''gon'') DEFAULT grad, Gefälleangabe ENUM(''%'', ''Promille'', ''1:'') DEFAULT %, CONSTRAINT FK_KN FOREIGN KEY FK_KN (Kundennummer) REFERENCES kunde (ID))';
Ich habe schon ein wenig rumprobiert, bekomme es allerdings nicht hin. Wie müsste ich den String Formatieren das er vom MySQL richtig verarbeitet wird? Gruß Pemue [EDIT:] Noch eine Frage, kann man einem integer-Feld vorgeben welche Länge es haben MUSS (also 7 Ziffern) ??? |
Re: MySQL ohne Komponenten
'%' ist eine Wildcard, wir sich also nicht als ENUM-Element verwenden lassen (oder ich kenne den entsprechenden Trick nicht), und was meinst Du mit der Anzahl der Stellen? Ob eine Zahl 7-stellig ausgegeben wird, ist IMHO eine Frage der Ausgabeformatierung.
[edit] Ansonsten schau mal, ob ZeroFill Dir weiterhilft (bin aus der Beschreibung nicht ganz schlau geworden) [/edit] |
Re: MySQL ohne Komponenten
Zitat:
Eine Kundennummer ist z.B. immer 7 Stellig, also soll durch das Feld erzwungen werden das dort nur 7Stellig-vor-dem-Komma-Zahlen gültig sind! |
Re: MySQL ohne Komponenten
Versuch es mal mit Constraints.
|
Re: MySQL ohne Komponenten
Danke DeddyH das hat funktioniert...
nun habe ich noch eine frage, ich will eine Combobox mit den vorhandenen tabellen einer Datenbank füllen. zu Testzwecken wollt ich die erstmal in ein Memo schreiben. Mein code schaut so aus:
Delphi-Quellcode:
allerdings schimpft er mich schon vor dem testen das _myRes kein Integer ist, aber ich will ja auch nen string rausbekommen, bzw mehrere.
procedure TForm1.Button1Click(Sender: TObject);
var _myRes: PMYSQL_RES; begin query := 'SHOW TABLES FROM apitest'; _myRes:= mysql_real_query(_myCon,Pchar(query), Length(query)); Memo1.Text := _myRES; end; Wie also geh ich mit dieser query um? also wie fange ich sie ab und komme dann auf meine Tabellennamen? das
Delphi-Quellcode:
habe ich so deklariert wiel ich dachte das ist dann richtig.
_myRES: PMYSQL_RES
Sorry bin ein ziemlicher anfänger, aber ich hoffe mir kann doch jemand helfen. Vielen Dank schonmal für eure Hilfe! Gruß Pemue |
Re: MySQL ohne Komponenten
Schau Dir nochmal Zeile 23 aus #251 an:
Delphi-Quellcode:
Ich hoffe, das ist nun klarer geworden ;)
Res := mysql_store_result(Con);
|
Re: MySQL ohne Komponenten
wo finde ich diese Zeile? in der mysql.pas? dort habe ich sie leider nicht finden können
[edit:] habe es gefunden, aber ich bekomme für _myRes (von PMYSQL_RES) nur '$BE2428' zurück. und es nützt auch nichts wenn ich das dann als string caste |
Re: MySQL ohne Komponenten
Zitat:
![]() |
Re: MySQL ohne Komponenten
Das Prinzip ist immer das Gleiche:
Delphi-Quellcode:
Ungetestet, sollte aber im Groben funktionieren.
procedure TForm1.Button1Click(Sender: TObject);
var Con: PMYSQL; host, user, pass, db: PChar; Row: PMySQL_Row; Res: PMYSQL_RES; query: string; i: integer; begin host := 'localhost'; user := 'root'; pass := ''; db := 'apitest'; Con := mysql_init(nil); if Assigned(Con) then try if Assigned(mysql_real_connect(Con, host, user, pass, db, 3306, nil, 0)) then begin query := 'SHOW TABLES FROM apitest'; mysql_real_query(Con,PChar(query), Length(query)); Res := mysql_store_result(Con); if Assigned(Res) then for i := 0 to mysql_num_rows(Res) - 1 do begin Row := mysql_fetch_row(Res); Memo1.Lines.Add(Row[0]); end; end else ShowMessage(mysql_error(Con)); finally mysql_close(Con); end; end; |
Re: MySQL ohne Komponenten
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ist zwar schon lange her, dass zu diesem Thema etwas geschrieben wurde, aber ich habe eine Frage und finde trotz intensivster Suche keine ANtwort. Ich weiß auch, dass es wahrscheinlich angebracht wäre, einen neuen Beitrag zu erstellen, aber ich hoffe hier eine bestimmte Gruppe von Usern ansprechen zu können - nämliche solche, die Delphi und MySQL ohne Komponenten verbunden haben... Ich habe alle so gemacht, wie es oben beschrieben wurde - mit großem Erfolg. Allerdings war es nur möglich, StringGrids mit Daten aus der DB zu füllen. Ich benötige eine Möglichkeit, wie ich ein Edit-Feld mit Daten bestücken kann. Folgendes hatte ich mir überlegt - ohne Erfolg:
Delphi-Quellcode:
Ich bekomme nur Fehlermeldungen. Die Verbindung zur MySQL DB klappt zwar einwandfrei, ich bekomme aber keine einzelnen Daten heraus, sondern nur in einem StringGrid (FillGrid)
function FillEdit(const Datenbank, query, Spalte: string; ED:TEdit): Boolean;
var MySQLRes: PMYSQL_RES; Field: PMYSQL_FIELD; ErrorCode: Integer; begin connect; // Datenbank auswählen ErrorCode := mysql_select_db(_mycon, PChar(Datenbank)); if ErrorCode = 0 then begin // Query ausführen ErrorCode := mysql_real_query(_mycon, PChar(query), length(query)); if ErrorCode = 0 then begin // Query speichern MySQLRes := mysql_store_result(_mycon); if Assigned(MySQLRes) then begin with MySQLRes do begin ED.Text:=FieldByName(Spalte).AsString; end; end; end; end; end; procedure TBackForm.Button1Click(Sender: TObject); var query:string; Spalte :string; begin connect; query:='select * from auftrag where FA_NR=100014'; spalte.text:='ArtikelNr'; filledit (DB, query, Spalte, edit1); disconnect; end; Es wäre SPITZE, wenn mir einer weiterhelfen könnte, da ich mit meinem Latein am Ende bin (nach 50-60 Stunden Ausprobieren).. Danke |
Re: MySQL ohne Komponenten
Der Fehler ist in folgender Zeile:
Delphi-Quellcode:
Das kann nicht gehen, da Du keine TTable oder TQuery verwendest und daher auch keine TFields hast, die Du mit FieldbyName direkt ansprechen kannst.
ED.Text:=FieldByName(Spalte).AsString;
Du musst vielmehr den Umweg über das Stringgrid nehmen und das gewünschte Feld auswählen, dann kannst Du den Text als normalen String an das Edit-Feld übergeben... Schau auch mal in den Beitrag #262 von DeddyH, dort wird das Prinzip eigentlich schon sehr gut erklärt, da wird in ein Memo geschrieben, muss man eigentlich nur auf TEdit umstellen... :coder: |
Re: MySQL ohne Komponenten
Oder aber du deklarierst dir ein Record und schreibst dort die Daten rein und nimmst einfach die Information raus und schreibst sie ins TEdit.
Und Spalte.Text gibts net. Spalte := ... wuerde schon eher gehen! |
Re: MySQL ohne Komponenten
Ich wollte mit der mySQL Direct... einen Insert ausführe, doch sagt mir der Compiler
[Fehler] test_pas.pas(88): String-Literale können maximal 255 Elemente besitzen[code] ja aber was mach ich nun? mein Insert ist halt über 300 Zeichen da er viele Felder hat... HIIILFE :-) Geht es nur in dem ich den String aufteile? |
Re: MySQL ohne Komponenten
Moin Doreen,
Zitat:
'Literal1'+'Literal2'+... Jeweils maximal 255 Zeichen. |
Re: MySQL ohne Komponenten
Der Link im 1. Post ist immernoch veraltet und down.
Vielleicht könnte man ja nun, fast 1,5 Jahre später mal einigen Vorschlägen (von z.B. seite 16) folgen und da Einiges editieren? |
Re: MySQL ohne Komponenten
Zitat:
|
Re: MySQL ohne Komponenten
bei mir 18
|
Re: MySQL ohne Komponenten
aber hier
![]() |
Re: MySQL ohne Komponenten
Es gibt nun eine aktualisierte mysql.pas. Diese Version ist mit diversen libmysql.dll's lauffähig.
![]() Ein Demoprogramm liegt bei. Die Lizenz wurden in Absprache mit Matthias Fichtner auf die Mozilla Public License Version 1.1 geändert. |
Re: MySQL ohne Komponenten
Zitat:
|
Re: MySQL ohne Komponenten
Klar unter dem angegeben link habe ich es runtergeladen! alles ok gerade nochmal getestet!
|
Re: MySQL ohne Komponenten
Zitat:
|
Re: MySQL ohne Komponenten
Witzig komisch ... also hier mal der direkte link SORRY soll nun kein Deep-Link sein!
![]() |
Re: MySQL ohne Komponenten
Jetzt hab ichs. Hab die URL von Hand eingegeben und die \ durch / ersetzt, dann kam es auch ;)
(liegt vielleicht am FireFox?) |
Re: MySQL ohne Komponenten
Zitat:
Also vor langer Zeit habe ich bereits einmal mit dieser Unit gearbeitet und hatte keine Probleme damit. Für ein anderes Projet möchte ich wieder auf eine MySQl-DB zugreifen doch ich bekomme bereits beim Befehl mysql_init(nil) eine Access Violation Felhermeldung. Weiß einer woran dies liegen kann? mfg, Jan |
Re: MySQL ohne Komponenten
Vielleicht fehlt
Delphi-Quellcode:
Alternativ zu dem Befehl "libmysql_load(nil)" kann auch in mysql.pas die Zeile
libmysql_load(nil);
Delphi-Quellcode:
in
{$DEFINE DONT_LOAD_DLL}
Delphi-Quellcode:
geändert werden. Damit wird die libmysql.dll bereits beim Programmstart geladen.
{.$DEFINE DONT_LOAD_DLL}
|
Re: MySQL ohne Komponenten
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz