AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQLLite Datensatz hinzufügen, wenn nicht vorhanden
Thema durchsuchen
Ansicht
Themen-Optionen

SQLLite Datensatz hinzufügen, wenn nicht vorhanden

Ein Thema von Peter666 · begonnen am 8. Jan 2015 · letzter Beitrag vom 8. Jan 2015
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: SQLLite Datensatz hinzufügen, wenn nicht vorhanden

  Alt 8. Jan 2015, 12:13
@AlexII

Erklär doch bitte mal was passiert, wenn du das try except nicht verwendest und eine Exception auftritt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#2

AW: SQLLite Datensatz hinzufügen, wenn nicht vorhanden

  Alt 8. Jan 2015, 12:18
@AlexII

Erklär doch bitte mal was passiert, wenn du das try except nicht verwendest und eine Exception auftritt.
Es wird ein Fehler angezeigt, das auf jeden Fall denke ich, aber ich weiß nicht was das für eine Fehlermeldung sein wird. Irgendwas mit "DB error" oder so, womit man nichts anfangen kann. Oder irre ich mich?

Werde ich aber testen!
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: SQLLite Datensatz hinzufügen, wenn nicht vorhanden

  Alt 8. Jan 2015, 12:25
@AlexII

Erklär doch bitte mal was passiert, wenn du das try except nicht verwendest und eine Exception auftritt.
Es wird ein Fehler angezeigt, das auf jeden Fall denke ich, aber ich weiß nicht was das für eine Fehlermeldung sein wird. Irgendwas mit "DB error" oder so, womit man nichts anfangen kann. Oder irre ich mich?
Da kommt also ein Dialog mit einer Fehlermeldung und die Verarbeitung wird abgebrochen.
Mit deiner Variante kommt ein Dialog mit einer angepassten Fehlermeldung und die Verarbeitung wird hinter dem try except Block fortgesetzt!

Um Fehlermeldungen umzubenennen, bzw. benutzerfreundlich zu formulieren nimmt man
Delphi-Quellcode:
try

except
  on E: Exception do
    raise Exception.Create( 'Hier ist was falsch' );
end;
Wobei es sinnvoll ist nur auf spezielle Exceptions so zu reagieren und andere einfach durchlaufen zu lassen.

Das mal durchlesen: http://docwiki.embarcadero.com/RADSt.../de/Exceptions
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#4

AW: SQLLite Datensatz hinzufügen, wenn nicht vorhanden

  Alt 8. Jan 2015, 12:34
Mit der Unique Eigenschaft vereinfacht sich das ganze.

So kann ich z.B. folgendes machen:
Delphi-Quellcode:
with Query.SQL do
  begin
   Add('INSERT OR REPLACE INTO Countries (Region, Name)');
   Add(format('VALUES (%d,"%s");',[Integer(CountryRegion),CountryName]));
  end;
Wie kann ich mir die aktualisierte Zeile anzeigen lassen?

Peter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: SQLLite Datensatz hinzufügen, wenn nicht vorhanden

  Alt 8. Jan 2015, 12:42
Besser Parameter verwenden

Query.SQL.Text := 'INSERT OR REPLACE INTO Countries (Region, Name) VALUES ( :region, :name);';

...

Query.SQL.ParamByName('region').Value/asInteger := CountryRegion; oder

Query.SQL.Params[0].Value/asInteger := CountryRegion;
Zitat:
Wie kann ich mir die aktualisierte Zeile anzeigen lassen?
Wie meinst Du das? Den wert nach dem Update?
Markus Kinzler
  Mit Zitat antworten Zitat
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#6

AW: SQLLite Datensatz hinzufügen, wenn nicht vorhanden

  Alt 8. Jan 2015, 12:45
Danke, genau ich wollte den Geschriebenen bzw. Aktualisierten Wert in der Ausgabe haben. Sonst müsste ich ja ein
Code:
SELECT last_insert_rowid();
als separates Query vornehmen.
Am liebsten wäre mir, wenn ich das INSERT OR REPLACE durch ein INSERT ersetzen könnte. In dem Fall bekomme ich aber ja nicht den last_insert_rowid() geliefert, sofern der Eintrag schon vorhanden ist.

Peter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: SQLLite Datensatz hinzufügen, wenn nicht vorhanden

  Alt 8. Jan 2015, 12:49
Da SQLite kein RETURNING kennt ( wie z.B. FireBird), wirst Du den Datensatz neu Laden müsssen.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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