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
 
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: SQLLite Datensatz hinzufügen, wenn nicht vorhanden

  Alt 8. Jan 2015, 13:00
Ich würde mir das Leben nicht so schwer machen. Das Beispiel ist zwar für FireDAC, das Konzept sollte sich aber problemlos auf alle anderen DB-Frameworks umsetzen lassen.
Delphi-Quellcode:
unit Unit1;

interface

uses
  System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
  FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Stan.Param,
  FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet,
  FireDAC.Comp.Client;

const
  SQL_QUERY_MAX = 1;
  SQL_QUERY: array [0 .. SQL_QUERY_MAX] of string = (
    {0} 'SELECT id FROM foo WHERE val=:val',
    {1} 'INSERT INTO foo (val) VALUES(:val)' );

type
  TDataModule1 = class( TDataModule )
    FDConnection1: TFDConnection;
    FDQuery1: TFDQuery;
  private
    FQueries: array [0 .. SQL_QUERY_MAX] of TFDQuery;
    function GetQuery( const Index: Integer ): TFDQuery;
  protected
    property FooGetQuery: TFDQuery index 0 read GetQuery;
    property FooAddQuery: TFDQuery index 1 read GetQuery;
  public
    function GetFooId( const Val: string ): Integer;
    function AddFoo( const Val: string ): Integer;
    function GetFooIdOrAdd( const Val: string ): Integer;
  end;

var
  DataModule1: TDataModule1;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}
{ TDataModule1 }

function TDataModule1.AddFoo( const Val: string ): Integer;
var
  LQry: TFDQuery;
begin
  LQry := FooAddQuery;
  LQry.ParamByName( 'val' ).Value := Val;
  LQry.ExecSQL;
  Result := LQry.Connection.GetLastAutoGenValue( 'id' );
end;

function TDataModule1.GetFooId( const Val: string ): Integer;
var
  LQry: TFDQuery;
begin
  LQry := FooGetQuery;
  LQry.ParamByName( 'val' ).Value := Val;
  LQry.Open;
  try
    if LQry.Eof
    then
      Result := 0
    else
      Result := LQry.Fields[0].Value;
  finally
    LQry.Close;
  end;
end;

function TDataModule1.GetFooIdOrAdd( const Val: string ): Integer;
begin
  Result := GetFooId( Val );
  if Result = 0
  then
    Result := AddFoo( Val );
end;

function TDataModule1.GetQuery( const Index: Integer ): TFDQuery;
begin
  if FQueries[index] = nil
  then
    begin
      Result := TFDQuery.Create( Self );
      Result.Connection := FDConnection1;
      Result.SQL.Text := SQL_QUERY[index];
      FQueries[Index] := Result;
    end
  else
    Result := FQueries[Index];
end;

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


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 22:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz