Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Unerklärliches selbstständiges Insert? (https://www.delphipraxis.net/102627-unerklaerliches-selbststaendiges-insert.html)

tr909 1. Nov 2007 10:41

Datenbank: Access • Version: 2000 • Zugriff über: ADO

Unerklärliches selbstständiges Insert?
 
Moin. Ich habe hier ein altes Stück Software liegen bei dem ich einen Fehler nicht verstehe. Das der Code nicht schön ist weiß ich selber. Wird deshalb auch umgeschrieben. ;)

Ich benutze TJVLoginDialog und diese sind die beiden benutzen procedures.

Delphi-Quellcode:
procedure TfrmMain.JvLoginDialog1BeforeLogin(Sender: TObject);
begin
  ADOCon1.Close;
  ADOCon1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
    'datei.mdb;Persist Security Info=False';
  ADOCon1.Open;
end;

procedure TfrmMain.JvLoginDialog1CheckUser(Sender: TObject; const UserName,
  Password: string; var AllowLogin: Boolean);
var
  tblUs: TADOTable;
  i: integer;
begin
  userID := 0;
  userNa := '';
  tblUs := TADOTable.Create(self);
  tblUs.Connection := ADOCon1;
  tblUs.TableName := 'Nutzer';
  tblUs.Open;
  if tblUs.Locate('Kurz', UserName, []) then
    if tblUs.FieldByName('Password').AsString = Password then
    begin
      userID := tblUs.FieldByName('UserID').AsInteger;
      userNa := tblUs.FieldByName('Kurz').AsString;
    end;
  tblUS.Close;
  tblUs.Free;
  if userID = 0 then
  begin
    ShowMessage('Ungültiger Benutzername. Anwendung wird beendet.');
    ADOCon1.Close;
    JvLoginDialog1.TerminateApplication;
  end;
end;
Nun das was ich nicht verstehe. Zu nicht reproduzierbaren Zeitpunkten kommt es vor das der eingegebene Benutzername als neuer Eintrag in der Tabelle auftaucht. Das ich jedoch keinerlei Inserts benutze ist es mir ein Rätsel wie die da rein kommen.
Evtl. kann ja einer von euch dieses Rätsel lüften.

Gruß
tr909

mkinzler 1. Nov 2007 10:44

Re: Unerklärliches selbstständiges Insert?
 
Versuch es mal mit .Lookup()

tr909 1. Nov 2007 10:50

Re: Unerklärliches selbstständiges Insert?
 
Danke für die Antwort, aber eigentlich wollte ich nur wissen warum es bei meinem Code zum einfügen von Datensätzen kommt, weil ich ja nirgends explizit in die Tabelle schreibe.

Gruß
tr909

mkinzler 1. Nov 2007 10:51

Re: Unerklärliches selbstständiges Insert?
 
Anhand des Codesegments kann ich es auch nicht nachvollziehen.

tr909 1. Nov 2007 10:59

Re: Unerklärliches selbstständiges Insert?
 
Ich mir ja leider auch nicht. Dies ist auch die einzige Stelle an der auf die Tabelle zugegriffen wird.

thkerkmann 1. Nov 2007 11:06

Re: Unerklärliches selbstständiges Insert?
 
Hi,

könnte ein Fehler im Treiber mit dem Locate sein.

Setzt mal tblUs.ReadOnly auf true und dann erst öffnen, dann sollte das nicht mehr vorkommen.

Gruss

Jelly 4. Nov 2007 09:54

Re: Unerklärliches selbstständiges Insert?
 
Der Code alleine macht garantiert keine Inserts in der Tabelle, das muss von woanders herrühren.

N.B.: Du solltest eigentlich NIE ein Passwort im Klartext in einer DB Tabelle ablegen. Das aber nur mal so am Rande.

Faxman 4. Nov 2007 10:10

Re: Unerklärliches selbstständiges Insert?
 
wenn access geöffnet wird steht meines wissens der datensatzzeiger am ende der tabelle auf einem neuen, leeren datensatz.
das musst du mal prüfen und schauen das du autoinsert ausschaltest.
der insert passiert wohl wenn das richtige password gefunden wurde.

have fun

grenzgaenger 4. Nov 2007 11:27

Re: Unerklärliches selbstständiges Insert?
 
würde dir raten, das ganze erst mal auf SQL umzustellen... dein code stück sieht dann in etwa wie folgt aus..

Delphi-Quellcode:
procedure TfrmMain.JvLoginDialog1CheckUser(Sender: TObject; const UserName,
  Passwoprocedure TfrmMain.JvLoginDialog1CheckUser(Sender: TObject; const UserName,
  Password: string; var AllowLogin: Boolean);
var
  tblUs: TADOQuery;
  i: integer;
begin
  userID := 0;
  userNa := '';
  tblUs := TADOQuery.Create(self);
  try
   tblUs.Connection := ADOCon1;
   tblus.sql.add('select UserId, Kurz, Password from Nutzer where kurz = ' + quotedstr(username);
   tblUs.Open;
   if tblus.recordcount > 0 then
   begin
    tblus.first;
    if tblUs.FieldByName('Password').AsString = Password then
    begin
     userID := tblUs.FieldByName('UserID').AsInteger;
     userNa := tblUs.FieldByName('Kurz').AsString;
    end;
   end;
   tblUS.Close;
  finally
   tblUs.Free;
  end;
  if userID = 0 then
  begin
    ShowMessage('Ungültiger Benutzername. Anwendung wird beendet.');
    ADOCon1.Close;
    JvLoginDialog1.TerminateApplication;
  end;
end;

alzaimar 4. Nov 2007 11:37

Re: Unerklärliches selbstständiges Insert?
 
Zitat:

Zitat von tr909
Moin. Das der Code nicht schön ist weiß ich selber. Wird deshalb auch umgeschrieben. ;)

Zitat:

Zitat von grenzgaenger
...würde dir raten, das ganze erst mal auf SQL umzustellen...

:hi:


Zum Problem: Habe ich noch mit Access noch *nie* erlebt, will aber Nichts heißen. Mich würde interessieren, unter welchen Umständen das passiert. Poste bitte die Lösung, falls es sich wirklich um eine Accessmacke handeln sollte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz