Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   ADOQuery - SQLQuery ?? (https://www.delphipraxis.net/192433-adoquery-sqlquery.html)

xReva 18. Apr 2017 20:03

AW: ADOQuery - SQLQuery ??
 
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.

HolgerX 18. Apr 2017 20:09

AW: ADOQuery - SQLQuery ??
 
Dann schaue DIr doch mal diese Zeilen an:

Zitat:

Zitat von xReva (Beitrag 1368157)
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.

xReva 18. Apr 2017 21:03

AW: ADOQuery - SQLQuery ??
 
Oh man jetzt kriege ich diese Meldung : http://prntscr.com/exzfpl

nahpets 18. Apr 2017 21:18

AW: ADOQuery - SQLQuery ??
 
Mir ist nicht klar, was Du hiermit bezweckst:
Delphi-Quellcode:
 // Wurde ein Datensatz eingefügt? 
 if (ADOQuery1.ExecSQL() = 1) then begin
    // Lösche das letzte SQL
    ADOQuery1.SQL.Clear;
    // und führe nun das nicht existierende SQL aus?
    ADOQuery1.Open;
    // Und schließe es sofort?
    ADOQuery1.Close;
  end;
Das Open setzt das Vorhandensein eines gültigen SQL-Statements voraus, kann daher nach einem ADOQuery1.SQL.Clear nur zu der von Dir erhaltenen Fehlermeldung führen, da dann kein SQL-Statement mehr vorhanden ist.

xReva 18. Apr 2017 21:45

AW: ADOQuery - SQLQuery ??
 
Also wenn ich das open und das close rausnehme kommt keine Fehlermeldung mehr allerdings passiert in der db auch nichts x.x

xReva 18. Apr 2017 21:48

AW: ADOQuery - SQLQuery ??
 
http://prntscr.com/ey01qv das ist die datenbank + source code

p80286 18. Apr 2017 23:03

AW: ADOQuery - SQLQuery ??
 
könnte es sein, daß da noch ein "commit" fehlt bzw. Autocommit nicht auf true steht?

Gruß
K-H

xReva 18. Apr 2017 23:09

AW: ADOQuery - SQLQuery ??
 
Wo finde ich denn Autocommit?

Poelser 18. Apr 2017 23:36

AW: ADOQuery - SQLQuery ??
 
In der Datenbank-Connection.

Bis denne,
Poelser

haentschman 19. Apr 2017 06:12

AW: ADOQuery - SQLQuery ??
 
Moin...:P
@xReva: Warum hängst du die Screenshots nicht an den Beitrag an?
1. Irgendwann ist das Original verschwunden und der Beitrag ist nicht mehr vollständig. :?
2. Die meisten weigern sich Scripte auf der Internetseite in Übersee (automatisch) auszuführen um nur das Bild zu sehen. :evil:

zum Thema:
Diesen Teil verstehe ich von der Logik nicht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.SQL.Clear; // kann weg wenn du SQL.Text verwendest
  ADOQuery1.SQL.Add('select * from taccounts where susername='''+edit1.Text+''' and suserpass='''+edit2.Text+''' '); // besser Parameter und SQL.Text
  ADOQuery1.Open;
  if not ADOQuery1.Eof then // du erwartest nur einen Datensatz, warum die Bedingung auf EOF?
  begin
    // nur den Internetexplorer öffnen und nichts damit machen? Das könnte auch ohne Benutzernamen geschehen *grübel*
    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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr.
Seite 4 von 6   « Erste     234 56      

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 by Thomas Breitkreuz