Autor Beitrag
MarkusReisser
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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:

ausblenden volle Höhe Delphi-Quelltext
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;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 FMysql := TMysqlClient.create;
end;


procedure TForm1.Button1Click(Sender: TObject);
// Verbindung herstellen
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);
// Verbindung trennen
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);
// Datenbank auswählen
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);
// Datenbank erstellen
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);
// Datenbank löschen
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Fr 29.08.08 14:06 
Hallo,

wenn ich nen SQL Query ausführe, dann geht das sofort:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: 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...
:angel:
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Fr 29.08.08 16:40 
user profile iconMarkusReisser 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).