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
HolgerX

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

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 18:05
Hmm..

ADO braucht BeginTrans..
Ein ComitTrans brauchst DU auch nur machen, wenn Du bei ADO vorher ein BeginTrans gemacht hast.

Aber, wieso gehst Du denn nun den Weg mit Append/Post?

Ein Insert ist immer performanter, außer, Du hast die Datenmenge bereits zur Anzeige in z.B. eines DBGrids offen.

In meinem ersten post (#6) habe ich Dir eine korrigierte und lauffähige Lösung aufgezeigt.
Schade, dass Du sie nicht verwendest.

Hast Du überhaupt Schreibrechte auf die MySQL-DB?

Mit der Zeile
  if (SQLQuery1.ExecSQL() = 1) then begin // Prüfen, ob der Insert erfolgreich war hättest Du auch eine Prüfung, ob der Insert erfolgreich gewesen ist.
  Mit Zitat antworten Zitat
xReva

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

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 18:23
Ich überprüfe das direkt in der mysql Datenbank.


Holger danke für deine Antwort ich habe deine Lösung gesehen und auch ausprobiert allerdings erkennt er in dem Code block :


Delphi-Quellcode:
ADOQuery1.ParametersByName('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'

ParamByName muss bei der ADOQuery ja ParameterByName heißen richtig? Weil den teil ParamByName sieht er als fehlerhaft an genau wie .Value


Mfg Lucas
  Mit Zitat antworten Zitat
HolgerX

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

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 18:27
Hmm..

Ok, richtig..

Müsste so lauten:

ADOQuery1.Parameters.ParamByName('sUsername').Value :=

Das natürlich bei allen Parameter..

Es fehlte das Parameters
  Mit Zitat antworten Zitat
xReva

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

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 18:52
Jetzt sagt er mir Missing Sql Property :/
  Mit Zitat antworten Zitat
HolgerX

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

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 18:58
Hmm..


Dann zeig uns erstmal deinen jetzigen Source und die Stelle, an der die Fehlermeldung angezeigt wird..
  Mit Zitat antworten Zitat
xReva

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

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 19:03
http://prntscr.com/exylrv Da ist der Fehler zu sehen



Delphi-Quellcode:
unit try3;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Data.DB, Data.Win.ADODB,ShellAPI,
  Data.FMTBcd, Data.SqlExpr;

type
  TForm1 = class(TForm)
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    Button1: TButton;
    Button2: TButton;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from taccounts where susername='''+edit1.Text+''' and suserpass='''+edit2.Text+''' ');
ADOQuery1.Open;
if not ADOQuery1.Eof then
begin
ShellExecute(Application.Handle, 'open', PChar('C:\Program Files (x86)\Internet Explorer\iexplore.exe'), nil, nil, SW_NORMAL);
end
else


ShowMessage('Falscher Benutzername oder Password!');
end;

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

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

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


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

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

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

    ADOQuery1.Open;



    ADOQuery1.Close;
  end;
end;




end.
  Mit Zitat antworten Zitat
HolgerX

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

AW: ADOQuery - SQLQuery ??

  Alt 18. Apr 2017, 19:09
Dann schaue DIr doch mal diese Zeilen an:

Delphi-Quellcode:

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

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

    ADOQuery1.Open;
    ADOQuery1.Close;
  end;
end;

Ich sag nur 'Clear' -> 'Open'!
Was soll denn da für ein SQL-Befehl geöffnet werden?

Wenn Du das nach dem dem ExecSQL nicht mehr brauchst, dann kannst Du es auch weglassen.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 13:35 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