AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ADOQuery - SQLQuery ??

Ein Thema von xReva · begonnen am 18. Apr 2017 · letzter Beitrag vom 24. Apr 2017
Antwort Antwort
Seite 1 von 2  1 2      
xReva

Registriert seit: 15. Nov 2016
20 Beiträge
 
#1

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 13:59
Hallo, Danke für die Antwort ich benutze momentan zuhause die Testversion was der Enterprise entspricht und die selbe benutze ich auch in der Uni.


Wenn ich mit ADOQuery Parameter eingeben will sagt er immer Tstrings does not contain a member named 'Params'

Ich kenne auch leider nur den einen weg es mit Parametern zu machen bzw habe keinen anderen weg gefunden bis jetzt.

EDIT: Funktioniert das mit ADO Query dann im Prinzip gleich außer das es anders geschrieben wird bzw mit Parameters anstadt mit Params?



Mfg Lucas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 14:04
Zumindest funktioniert es ähnlich. Sollte Dir die Delphi-Hilfe nicht zur Verfügung stehen, kannst Du auch die DP-Referenz verwenden, um genauere Informationen zu bestimmten Themen/Klassen/Methoden zu erhalten, z.B. zu Delphi-Referenz durchsuchenTADOQuery.Parameters.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
981 Beiträge
 
Delphi 6 Professional
 
#3

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 14:07
Hmm..

Hier mal eine (mit 'SQLQuery1' als TADOQuery) leicht bereinigte Version:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  SQLQuery1.ParamCheck := true; // Bewirkt, dass die Parameter direkt 'initialisiert' = Erstellt werden!!

  SQLQuery1.SQL.Text:='INSERT into taccounts (sUsername,sUserPass,sUserPassSalt,sEmail,nAuthID,sIP) ' +
    'Values (:sUsername,:UserPass,:UserPassSalt,:email,:AuthID,:sIP)' ;

{ Brauchst Du nicht wegen SQLQuery1.ParamCheck := true
  SQLQuery1.Sql.Clear;
  SQLQuery1.Params.Clear;
  SQLQuery1.Params.CreateParam(ftString, 'Username', ptInputOutput);
  SQLQuery1.Params.CreateParam(ftString, 'UserPass', ptInputOutput);
  SQLQuery1.Params.CreateParam(ftString, 'UserPassSalt', ptInputOutput);
  SQLQuery1.Params.CreateParam(ftString, 'email', ptInputOutput);
  SQLQuery1.Params.CreateParam(ftInteger, 'AuthID', ptInputOutput);
  SQLQuery1.Params.CreateParam(ftString, 'sIP', ptInputOutput);
}



  SQLQuery1.ParamByName('sUsername').Value := edit3.text; // Hier fehlte das 's', siehe dein SQL Values (:sUsername
  SQLQuery1.ParamByName('UserPass').Value := edit4.text;
  SQLQuery1.ParamByName('UserPassSalt').Value := edit5.text;
  SQLQuery1.ParamByName('email').Value := edit6.text;
  SQLQuery1.ParamByName('AuthID').Value := '4';
  SQLQuery1.ParamByName('sIP').Value := edit7.text; // Hier stand 'email' statt das 'sIP'

  if (SQLQuery1.ExecSQL() = 1) then begin // Prüfen, ob der Insert erfolgreich war

    SQLQuery1.SQL.Clear;
// SQLQuery1.Params.Clear; // Wird beim löschen des SQL-Befehls direkt wieder entfernt...

    SQLQuery1.SQL.Text:='select last_insert_rowid() as nemid from taccounts';
    SQLQuery1.Open;

    nemid := SQLQuery1.FieldByName('nemid').AsString;

    SQLQuery1.Close;
  end;
end;

Geändert von HolgerX (18. Apr 2017 um 14:10 Uhr)
  Mit Zitat antworten Zitat
xReva

Registriert seit: 15. Nov 2016
20 Beiträge
 
#4

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 14:54
Hmm..

Hier mal eine (mit 'SQLQuery1' als TADOQuery) leicht bereinigte Version:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  SQLQuery1.ParamCheck := true; // Bewirkt, dass die Parameter direkt 'initialisiert' = Erstellt werden!!

  SQLQuery1.SQL.Text:='INSERT into taccounts (sUsername,sUserPass,sUserPassSalt,sEmail,nAuthID,sIP) ' +
    'Values (:sUsername,:UserPass,:UserPassSalt,:email,:AuthID,:sIP)' ;

{ Brauchst Du nicht wegen SQLQuery1.ParamCheck := true
  SQLQuery1.Sql.Clear;
  SQLQuery1.Params.Clear;
  SQLQuery1.Params.CreateParam(ftString, 'Username', ptInputOutput);
  SQLQuery1.Params.CreateParam(ftString, 'UserPass', ptInputOutput);
  SQLQuery1.Params.CreateParam(ftString, 'UserPassSalt', ptInputOutput);
  SQLQuery1.Params.CreateParam(ftString, 'email', ptInputOutput);
  SQLQuery1.Params.CreateParam(ftInteger, 'AuthID', ptInputOutput);
  SQLQuery1.Params.CreateParam(ftString, 'sIP', ptInputOutput);
}



  SQLQuery1.ParamByName('sUsername').Value := edit3.text; // Hier fehlte das 's', siehe dein SQL Values (:sUsername
  SQLQuery1.ParamByName('UserPass').Value := edit4.text;
  SQLQuery1.ParamByName('UserPassSalt').Value := edit5.text;
  SQLQuery1.ParamByName('email').Value := edit6.text;
  SQLQuery1.ParamByName('AuthID').Value := '4';
  SQLQuery1.ParamByName('sIP').Value := edit7.text; // Hier stand 'email' statt das 'sIP'

  if (SQLQuery1.ExecSQL() = 1) then begin // Prüfen, ob der Insert erfolgreich war

    SQLQuery1.SQL.Clear;
// SQLQuery1.Params.Clear; // Wird beim löschen des SQL-Befehls direkt wieder entfernt...

    SQLQuery1.SQL.Text:='select last_insert_rowid() as nemid from taccounts';
    SQLQuery1.Open;

    nemid := SQLQuery1.FieldByName('nemid').AsString;

    SQLQuery1.Close;
  end;
end;


Danke für die umfangreiche antwort! Aber wie würde das ganze mit ADOQuery aussehen? Da bei mir das ganze mit SQL Query nicht so wirklich klappt.

MFg Lucas
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
981 Beiträge
 
Delphi 6 Professional
 
#5

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 15:02
Hmm..


Danke für die umfangreiche antwort! Aber wie würde das ganze mit ADOQuery aussehen? Da bei mir das ganze mit SQL Query nicht so wirklich klappt.

MFg Lucas

(Einfach)
Packe nen TADOQuery auf deine Form und Benenne dann 'SQLQuery1' gegen 'ADOQuery1' (Name des erstellten ADOQuerys) um.

Fertig.

Wie ich geschrieben hatte, gilt das Beispiel für ein TADOQuery mit dem Namen 'SQLQuery1'

Auch sollten eigentlich alle von TDataSet abgeleiteten Querys nach dem Schema funktionieren (ohne Gewähr ).
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
601 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 15:23
Datensätze mit ADOQuery einfügen geht doch völlig problemlos ohne Parameter, Pseudocode:

Delphi-Quellcode:
ADOQuery.SQL.Text := 'Select irgendwas';
ADOQuery.Open;
ADOQuery.Append; //ein leerer Datensatz hinzu
ADOQuery.FieldByName('Feld1').AsString := 'Hallo';
ADOQuery.FieldByName('Feld2').AsInteger := 12345;
ADOQuery.FieldByName('Feld').AsBoolean := true;
ADOQuery.Post; //abschicken

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 15:38
Es mag sein, das es eine Konstellation gibt, mit der das funktioniert, aber im allg. geht das nicht.
Des Muster dafür sieht ungefähr so aus (mit Abweichungen je nach DB und Querykomponente)
Delphi-Quellcode:
Query.SQL.Text:='update mytable set myfield=:prm1 where id=:id';
Query.Parameters.Parambyname('prm1').asstring:='Wert1';
Query.Parameters.Parambyname('id').asinteger:=12345;
Query.ExecSQL;
{ggf betroffene Sätze Holen}
if Query.Rowsaffected>0 then showmessage('Update erfolgreich');
(und je nach Version für ADO: .Value='Wert1; und .Value:='12345'; )!!


Gleiches gilt für Insert und Select. Esrst den SQL-Text,dann die Parameter setzen, dann ein .Open oder .ExecSQL.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (18. Apr 2017 um 15:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#8

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 14:12
[meine Meinung]
Hallöle...
Zitat:
Ich kenne auch leider nur den einen weg es mit Parametern zu machen bzw habe keinen anderen weg gefunden bis jetzt.
...lieber nicht! Es gibt keinen Weg an Parametern vorbei.

kleiner Fehler:
Delphi-Quellcode:
SQLQuery1.ParamByName('sUsername').Value := edit3.text;
...
SQLQuery1.ParamByName('UNA').AsString := edit3.text; // besser
...
SQLQuery1.SQL.Clear; // braucht man nicht bei SQl.Text
1. Im Prinzip ist es egal... aber die Parameter (z.B. 3 stellig) als Kürzel sind von Feldnamen besser zu unterscheiden. Logischerweise müssen die Kürzel auch im SQL auftauchen.
2. nicht an @TE: Warum wird immer wieder .Value wenn keine Notwendigkeit auf den Cast besteht benutzt...Langeweile beim Debuggen?. As....für den exakten FeldTyp ist besser. Da erkennt man das man den falschen Typ übergibt.
3. In welchen Büchern steht sowas drin? Das SQl.Clear ist nicht notwendig da der komplette Text in der SQL Stringlist getauscht/aktualisiert wird.
[/meine Meinung]

Geändert von haentschman (18. Apr 2017 um 14:39 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
981 Beiträge
 
Delphi 6 Professional
 
#9

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 14:44
Hmm..

3. In welchen Büchern steht sowas drin? Das SQl.Clear ist nicht notwendig da der komplette Text in der SQL Stringlist getauscht/aktualisiert wird.

Das steht im Source-Code von TDataSet!
TDataSet.CheckInactive;
-> Aufgerufen von TCustomADODataSet.SetCommandText(const Value: WideString);

bevor der SQL-Query gesetzt wird (bei OnChange des SQLs).

Edit...
Blubber.. Blödsinn.. (Close als Clear interpretiert..)
Der Tag ist schon zu lange..

Aber hier im Forum war erst vor kurzem ein Thema, in dem dies erläutert wurde..

@xReva

Immer erst den SQL.Text setzen und dann die Parameter, nicht umgekehrt!
Die Parameter könnten sonst gecleart werden

Geändert von HolgerX (18. Apr 2017 um 14:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#10

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 14:49
Zitat:
Das steht im Source-Code von TDataSet!
...da gehört es auch hin (ohne Gewähr). Aber nicht vor SQl.Text im eigenen Quellcode.

Noch ein Hinweis:
Die ungarische Notation (DatenTyp vor Variablen) ist heute nicht mehr üblich. Besser vernüftige Benamsung...https://de.wikipedia.org/wiki/Ungarische_Notation Abschnitt: Kritik.

Geändert von haentschman (18. Apr 2017 um 14:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:42 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