Autor Beitrag
NOS1971
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Mo 24.03.14 18:59 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: 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:

ausblenden 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.

Für diesen Beitrag haben gedankt: NOS1971
NOS1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Mo 24.03.14 22:29 
Das wars schon ... vielen lieben Dank !
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Di 25.03.14 10:55 
Du kannst es auch mal damit probieren (erste Antwort):
stackoverflow.com/qu...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).
ausblenden 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.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)