Entwickler-Ecke

Datenbanken - Auf vorhandenen Eintrag in DB testen


NOS1971 - Mo 24.03.14 18:59
Titel: Auf vorhandenen Eintrag in DB testen
Hallo zusammen,

ich suche eine Möglichkeit festzustellen ob es bereits einen Eintrag mit einer bestimmten URL in meine Tabelle gibt

Was nutze ich da ?

Ich würde gern in einer TSQLQuery 'SELECT COUNT(*) FROM ResultURLTable WHERE URL = :URL;' aber ich check nicht wie ich an das Ergebnis komme.

Könnt Ihr helfen ?

Grüße,
Andreas


Gerd Kayser - Mo 24.03.14 21:52

user profile iconNOS1971 hat folgendes geschrieben Zum zitierten Posting springen:
aber ich check nicht wie ich an das Ergebnis komme.

Hier ein Beispiel für Interbase:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
          with DatenModul.IBQuery1 do
            begin
              SQL.Clear;
              SQL.Add('select count(*) from TabProgramme                  ');
              SQL.Add('where                                              ');
              SQL.Add('  (Rechner = :Rechner) and (Platte = :Platte)      ');
              SQL.Add('  and (Subvolume = :Volume)                        ');
              ParambyName('Rechner').AsString := Rechner;
              ParambyName('Platte').AsString := Platte;
              ParambyName('Volume').AsString := Volume;
              Open;
                Anzahl := Fields[0].AsInteger;
              Close;
            end;

Bei Deiner Datenbank sollte das gleich oder ähnlich sein.


NOS1971 - Mo 24.03.14 22:29

Das wars schon ... vielen lieben Dank !


Delete - Di 25.03.14 07:50

user profile iconNOS1971 hat folgendes geschrieben Zum zitierten Posting springen:
ich suche eine Möglichkeit festzustellen ob es bereits einen Eintrag mit einer bestimmten URL in meine Tabelle gibt

Es geht auch damit:


Delphi-Quelltext
1:
2:
3:
4:
function IstUrlVorhanden(AURL : String) : Boolean;
begin
  Result := MyDataSet.Locate('URL',AURL,[]);
end;


Du erfährst zwar nicht, wie oft dieser Eintrag in deiner Tabelle vorkommt, doch wenn du vor jedem Insert erst einmal testest, ob diese URL schon drin ist, kannst du doppelte Einträge vermeiden.


Xion - Di 25.03.14 10:55

Du kannst es auch mal damit probieren (erste Antwort):
http://stackoverflow.com/questions/531035/how-to-do-if-not-exists-in-sqlite

Wenn du die URL als primary key nutzen willst (also als Identifikation, die nur einmal vorkommen darf), kann es durchaus Sinn machen, das der Datenbank mitzuteilen, damit die sich darum kümmert. Also z.B. als Unique definieren und dann mit dem Code von oben einfügen.
Zu bedenken: Falls du dann doch mal eine Url zweimal einfügen möchtest, gibts von SQLite eins auf die Finger.

user profile iconNOS1971 hat folgendes geschrieben Zum zitierten Posting springen:
Ich würde gern in einer TSQLQuery 'SELECT COUNT(*) FROM ResultURLTable WHERE URL = :URL;' aber ich check nicht wie ich an das Ergebnis komme.

Du kannst also momentan nur in die DB schreiben, aber nicht lesen? Das ist schlecht ;)
Hier mal ein Beispiel (Pseudocode), wie das aussehen kann (kommt natürlich darauf an, welche Komponenten du benutzt).

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function UrlExists(Url: String): boolean;
var
  query: TSQLIteTable;
begin
  query := sqlDB.GetTable('SELECT COUNT(*) AS cnt FROM ResultURLTable WHERE URL = :URL');
  Result := (query.FieldAsInteger(query.FieldIndex['cnt']))>0;
  query.Free;
end;

Meistens ist es so, dass du mit .ExecSQL nur Befehle absenden kannst (z.B. INSERT). Wenn es aber eine Rückgabe geben soll, dann musst du bestimmt sowas wie ein Query haben, welches das Ergebnis aufnimmt.