Autor |
Beitrag |
MarkusReisser
Hält's aus hier
Beiträge: 15
|
Verfasst: Fr 29.08.08 12:00
Hallo,
ich möchte mir ein SQL Query Tool schreiben.
Zur Zeit habe ich alles, bis auf die SQL Query Funktion. Nur leider beginnt da schon das Problem. Ich kann mich verbinden mit der Datenbank. Das klappt 100%. Ich kann die Verbindung trennen. Ich kann eine DB auswählen, erstellen und löschen. Zumindest sagt er mir das. Nur wenn ich dann ins PhpMyadmin gehe, dann sehe ich da keine DB, die ich aber gerade erstellt hatte...
//
Habe gerade rausgefunden... Die DB löschen macht er, wenn ich die Verbindung trenne. Und die Datenbank erstellen, das macht er, wenn ich die Verbindung trenne und das Tool schließe. Hm, woran kann das denn liegen?
Hier mal der Code. Vllt findet ja einer einen Fehler:
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: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, umysqlvio, uMysqlCT, uMysqlClient, uMysqlHelpers, StdCtrls;
{$I mysqlinc.inc}
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Memo1: TMemo; Button3: TButton; Edit5: TEdit; Button4: TButton; Edit6: TEdit; Button5: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private FMysql: TMysqlClient; FResult: TMysqlResult; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin FMysql := TMysqlClient.create; end;
procedure TForm1.Button1Click(Sender: TObject); begin FMysql.Host:=Form1.Edit1.Text; FMysql.port:= 3306; FMysql.user:=Form1.Edit2.Text; FMysql.password:=Form1.Edit3.Text; FMysql.UnixSocket := ''; FMysql.Db := 'mysql'; FMysql.UseNamedPipe := false; FMysql.UseSSL := false; FMysql.Compress := true; FMysql.TrySockets := false; if FMysql.Connect then ShowMessage('Verbindung erfolgreich hergestellt') else ShowMessage('Fehler: '+FMysql.LastError) end;
procedure TForm1.Button2Click(Sender: TObject); begin if FMysql.Connected then begin FMysql.close; ShowMessage('Verbindung erfolgreich getrennt') end else ShowMessage('Es war keine Verbindung aufgebaut'); FMysql.Free; if FResult<>nil then FResult.free; end;
procedure TForm1.Button3Click(Sender: TObject); var db:string; begin if FMysql.Connected then begin db:=Form1.Edit4.Text; if db='' then db:='mysql'; if FMysql.select_db(db) then ShowMessage('Select db: OK') else ShowMessage('Select db fehlgeschlagen: '+FMysql.LastError) end else ShowMessage('Es besteht keine Verbindung'); end;
procedure TForm1.Button4Click(Sender: TObject); var db:string; begin db:=Form1.Edit5.Text; if db='' then db:=InputBox('Fehler','Welche DB?',''); if FMysql.create_db(db) then ShowMessage('Create db: OK') else ShowMessage('Create db fehlgeschlagen: '+FMysql.LastError); end;
procedure TForm1.Button5Click(Sender: TObject); var db:string; begin db:=Form1.Edit6.Text; if db='' then db:=InputBox('Fehler','Welche DB?',''); if FMysql.drop_db(db) then ShowMessage('Drop db: OK') else ShowMessage('Drop db fehlgeschlagen: '+FMysql.LastError); end;
end. |
Danke schonmal im Vorraus an alle...
Hier mal ein Bild, zur Veranschaulichung.
Einloggen, um Attachments anzusehen!
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Fr 29.08.08 13:32
Hmm, DDL wird eigentlich ohne Transaktion ausgeführt, zumindest kenne ich das so.
Versuch mal nach dem CREATE bzw. DROP ein COMMIT zu machen.
|
|
MarkusReisser 
Hält's aus hier
Beiträge: 15
|
Verfasst: Fr 29.08.08 14:06
Hallo,
wenn ich nen SQL Query ausführe, dann geht das sofort:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button6Click(Sender: TObject); var q:string; ex: boolean; begin if assigned(FResult) then begin if FMysql.Status<>MYSQL_STATUS_READY then ShowMessage('Unvollständig'); FreeAndNil(FResult); end; q:=Form1.Memo1.Text; FResult:=FMysql.query(q, true, ex); if assigned(FResult) then ShowMessage('Query: OK - Ergebnis gespeichert') else if ex then ShowMessage('Query: OK - ausgeführt') else ShowMessage('Query fehlgeschlagen: '+FMysql.LastError); end; |
Mit dem COMMIT befrage ich mal google
Danke schonmal
Mfg Markus
|
|
iKilledKenny
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: Fr 29.08.08 14:24
OffTopic:
Du weisst aber,
a) dass es für MySQL den MySQL Administrator und den MySQL QueryBrowser gibt?
b) dass du bei den meisten WebHostern nicht direkt auf die DB verbinden kannst?
Ich weiss, dass das eine Menge Annahmen meinerseits sind und ich will dir nicht den Wind aus den Segeln nehmen, wollte das aber mal angemerkt haben...

|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Fr 29.08.08 16:40
MarkusReisser hat folgendes geschrieben: | Hallo,
wenn ich nen SQL Query ausführe, dann geht das sofort |
SELECT-Abfragen werden auch sofort beantwortet (je nach Einstellung siehst du jedoch nur Daten deiner Transaktion).
Wenn du ein UPDATE oder DELETE-Statement (siehe auch DML) ausführst, wirst du dieses auch erst (in einem anderen Client) sehen, nachdem die Transaktion abgeschlossen ist.
Wann das passiert hängt von den DB-Einstellungen ab. Entweder steht diese auf "auto commit", dann wir nach jedem DELETE sofort gelöscht, sofern du nicht explizit eine Transaktion anforderst (bei MS SQL der Fall) oder eben nicht, dann musst du jeden ändernden Befehl ( UPDATE/ DELETE) per COMMITbestätigen oder per ROLLBACKwieder zurück nehmen.
Ich schlage vor, du schaust dir erstmal ein paar Tutorials zu SQL im generellen an. Aber Vorsicht: Auch wenn SQL '92 ein Standard ist, so setzt ihn kaum eine Datenbank vollständig um (das gleiche gilt für SQL '99 und 2003).
|
|
|