Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi gleiche einträge verhindern (https://www.delphipraxis.net/76294-gleiche-eintraege-verhindern.html)

mimi 1. Sep 2006 14:42

Datenbank: sqlite3 • Version: 3 • Zugriff über: sqlite3.dll

gleiche einträge verhindern
 
Hallo,
ich nutze die "sqlite3.dll" und habe damit sogut wie keine erfahrung.

so ich kann inzwischen einträge hinzufügen zurlaufzeit und im qullcode das problem ist dabei:
sobalt einträge doppelt vorkommen das eine fehlermeldung erzeugt wird.... kann ich diese feherlmeldung irgenwie abfangen und verarbeiten ? bzw. verhindern evlt ?

hoika 1. Sep 2006 16:34

Re: gleiche einträge verhindern
 
Hallo,

mache
Delphi-Quellcode:
try
  Insert;
except
end;
Heiko

mimi 2. Sep 2006 10:35

Re: gleiche einträge verhindern
 
Geht leider nicht...

hier ist mein qullcode
Delphi-Quellcode:
procedure TForm1.InitDb(FileName:TFileName);
var
  slDBpath:String;
  i:Integer;
  isda:Boolean;
begin
  slDBpath:=ExtractFilepath(application.exename)+ 'test.db';
  sldb := TSQLiteDatabase.Create(slDBPath);

//  if sldb.TableExists('testTable') then begin
//    sSQL := 'DROP TABLE testtable';
//    sldb.execsql(sSQL);
//   end;


  if sldb.TableExists('testTable') = False then begin
    sSQL :='CREATE TABLE testtable ([Name] VARCHAR (255));';
    sldb.execsql(sSQL);
    sldb.execsql('CREATE INDEX TestTableName ON [testtable]([Name]);');
  end;

try
  sldb.BeginTransaction;
  sSQL := 'INSERT INTO testtable(Name) VALUES ("Some Name");';
  sldb.ExecSQL(sSQL);

  sSQL := 'INSERT INTO testtable(Name) VALUES ("Another Name");';
  sldb.ExecSQL(sSQL);
  sldb.Commit;
except
end;

   sltb := slDb.GetTable('SELECT * FROM testtable');
  for i:=0 to sltb.Count-1 do begin
    ListBox1.Items.add(sltb.FieldAsString(sltb.FieldIndex['Name']));
    sltb.Next;
  end;
end;
mir ist heute noch was anders eingefallen. ich weiß nur nicht ob sich das lohnen würde und zwar:
ich lege ein array an von typ tmyData z.b.
und in diesem record ist eine boolean variable und ein array of interger.
jetzt ich jedes zeichen durchgehen und umwandeln und nachschauen ob es diese zeichen mit dieser position schon gibt. könnt ihr folgende?

so müste ich nicht suchen und vorallen bei größeren datenmengen könnte diese verfahren praktisch sein vorrausgesetzt das es funktioniert und auch so klappt wie ich es mir vorstelle.

achja dieser array of interger brauche ich um dort die position des jeweiligen zeichen obzuspeichern.
Ich gehe ja jedes zeichen durch von string der hinzugefügt werden soll und füge diese in eine listbox ein.
bevor ich das mache wollte ich jedese zeichen in einer schleife durchgehen und prüfen ob es diesen zeichen schon gibt wenn ja, gibt es diese zeichen an der jeweiligen position.
jetzt wollte ich daraus ein string bilden und verleichen mit dem string den ich hinzufügen möchte. mit groß klein schreibung vergleichen. so die idee jetzt weiß ich nicht ob das wirklich schneller als z.b. die listbox jedes mal durchzugehen und zu schauen ob es dort schon ein entsprechden eintrag gibt...

ich hoffe ihr versteht was ich vorhabe....

Go2EITS 2. Sep 2006 12:39

Re: gleiche einträge verhindern
 
@mimi
Ich bin kein SQL Fachmann, aber beim Überfliegen Deines Codes fällt mir auf:
Solltest Du nicht vorher in der Datenbank nachsehen, ob der Name schon vorhanden ist?
Unter Try willst Du gleich die Daten eingeben? :gruebel:

Und bei einem Conflict kann Du der Datenbank sagen, was Du tun möchtest:
on conflict
Vielleicht hilft es Dir weiter.

Beste Grüße
Go2EITS

mimi 2. Sep 2006 16:51

Re: gleiche einträge verhindern
 
vielen dank für den link, sowas hatte ich vor.
ich wollte gerne nach prüfen ob es diesen eintrag schon gibt oder nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 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