Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADOConnection (https://www.delphipraxis.net/201669-adoconnection.html)

haentschman 14. Aug 2019 09:11

AW: ADOConnection
 
Delphi-Quellcode:
procedure DeleteClick(Sender: TObject);
var
  sQuery : string;
begin
  sQuery := 'DELETE FROM ' + DBNAME + ' WHERE seriennummer = 0000000000000000';

  FDQuery.SQL.Clear;
  FDQuery.SQL.Add(sQuery);
  FDQuery.SQL.Add('SELECT * FROM ' + DBNAME);
  FDQuery.Active := True;
  SetGridColumnWidths(DBGrid);
end;
1. Keine globalen Variablen! (DBNAME) :warn:
2. Entweder Select oder Delete in der Query
3. Select mit Open
4. Delete mit ExecSQL
5. Parameter verwenden

Delphi-Quellcode:
procedure DeleteClick(Sender: TObject);
var
  sQuery : string;
begin
  sQuery := 'DELETE FROM ' + DBNAME + ' WHERE seriennummer = :SER';

  FDQuery.SQL.Text(sQuery);
  FDQuery.ParamByName('SER').AsString := '000000000';
  FDQuery.ExecSQL;
  SetGridColumnWidths(DBGrid);
end;

p80286 14. Aug 2019 09:13

AW: ADOConnection
 
Zitat:

Zitat von haentschman (Beitrag 1441276)
Als Firma sollten die MyDAC oder UniDAC drin sein..

Hmmmm, nach meiner Erfahrung ist das natürlich nicht drin "schließlich haben wir ja schon das Delphi bezahlt"
(ich weiß das das Kurzsichtig ist, aber der Chef ist der Chef und der kennt sich aus weil er xxxx liest)

Gruß
K-H

haentschman 14. Aug 2019 09:16

AW: ADOConnection
 
Zitat:

"schließlich haben wir ja schon das Delphi bezahlt"
...kommt auf die Version an. :wink:

HolgerX 14. Aug 2019 09:17

AW: ADOConnection
 
Hmm..

Wenn Du eine einfache interne Datenbank benötigst und auf den Clients nichts installieren willst...
Es nur um die überschaubaren Datenmenge geht...

Schau mal zum MS-SQL-Server Express..
Einfach zu installieren, auf diesem Windows PC/Server nur 2 Ports zu öffnen und einen Dienst (Browser) zu aktivieren..
Keine Lizenzkosten..

Hier werden keine Treiber oder ODBCs unter Windows benötig, diese sind per se schon installiert.
Wenn Du keine besonderen Funktionen des Datenbankservers benötigst, dann genügt der 'alte' SQLOLEDB Provider..

Einfach per ADO ansprechbar...

(Nur so eine Idee.. ;) )

Moombas 14. Aug 2019 09:19

AW: ADOConnection
 
Zitat:

Zitat von haentschman (Beitrag 1441281)
Delphi-Quellcode:
procedure DeleteClick(Sender: TObject);
var
  sQuery : string;
begin
  sQuery := 'DELETE FROM ' + DBNAME + ' WHERE seriennummer = 0000000000000000';

  FDQuery.SQL.Clear;
  FDQuery.SQL.Add(sQuery);
  FDQuery.SQL.Add('SELECT * FROM ' + DBNAME);
  FDQuery.Active := True;
  SetGridColumnWidths(DBGrid);
end;
1. Keine globalen Variablen! (DBNAME) :warn:
2. Entweder Select oder Delete in der Query
3. Select mit Open
4. Delete mit ExecSQL
5. Parameter verwenden

Delphi-Quellcode:
procedure DeleteClick(Sender: TObject);
var
  sQuery : string;
begin
  sQuery := 'DELETE FROM ' + DBNAME + ' WHERE seriennummer = :SER';

  FDQuery.SQL.Text(sQuery);
  FDQuery.ParamByName('SER').AsString := '000000000';
  FDQuery.ExecSQL;
  SetGridColumnWidths(DBGrid);
end;

Edit: Fehlermeldung erhalte ich nur, wenn ich folgenden Code verwende:
Zitat:

FDQuery.SQL.Text := 'SELECT * FROM ' + DBNAME;
FDQuery.ExecSQL; //->Fehlermeldung
// FDQuery.Active := True; //funktioniert
Global (const) ist es aktuell nur, weil ich am testen bin und nicht immer die den test-DBNamen eingeben wollte ^^
Nachher muss so oder so individuell die Datenbank/die Tabelle gewählt werden.

haentschman 14. Aug 2019 10:14

AW: ADOConnection
 
Zitat:

3. Select mit Open
4. Delete mit ExecSQL
5. Insert mit ExecSQL
6. Update mit ExecSQL
...:zwinker:
Anders ausgedrückt: Soll die Abfrage eine Ergebnismenge enthalten...Open. Alles andere ExecSQL. :zwinker:
Delphi-Quellcode:
FDQuery.SQL.Text := 'SELECT * FROM ' + DBNAME;
FDQuery.Open;

Moombas 14. Aug 2019 10:25

AW: ADOConnection
 
Danke @ haentschman (und natürlich auch an HolgerX und die anderen). Hab es nun für alles soweit hinbekommen (auch mit den Parametern etc.).

Sowas "einfaches wie das mit dem "open" hätte ich gerne selber gefunden :?

Das mit dem Open geht auch in einer Zeile:
Code:
FDQuery.Open('SELECT * FROM ' + DBNAME);
Macht das was wenn vorher im SQL.Text was drin stand oder wird dieser dabei dann ignoriert/gelöscht?

haentschman 14. Aug 2019 10:28

AW: ADOConnection
 
Rückfrage: Warum Parameter?

deshalb:
https://de.wikipedia.org/wiki/SQL-Injection

Moombas 14. Aug 2019 10:31

AW: ADOConnection
 
Parameter deshalb, da ich Gerätedaten übergeben werde, wo die Spalte und die Datenbank gleich bleibt, der Parameter (z.B. Seriennummer) sich aber ändert.
Daher ist es schöner einfach den Parameter zu ändern mit grundsätzlich dem gleichen Query. Zudem lässt sich daraus, denke ich, zusätzlich auch besser eine eigene Funktion dafür bauen.

jobo 14. Aug 2019 10:40

AW: ADOConnection
 
Ich glaube ihr redet aneinander vorbei.
Wenn Moombas Parameter freiwillig einsetzt, braucht man ihn nicht mehr zu überzeugen und er muss sich natürlich auch nicht dafür "rechtfertigen", sie einzusetzen.
Parameter sind der richtige Ansatz! Leider haben sie auch manchmal ihre Grenzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 Uhr.
Seite 2 von 3     12 3      

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