AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Insert in eine Firebirddatenbank (Tabelle)
Thema durchsuchen
Ansicht
Themen-Optionen

Insert in eine Firebirddatenbank (Tabelle)

Ein Thema von Walter Landwehr · begonnen am 4. Sep 2014 · letzter Beitrag vom 8. Sep 2014
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.548 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Insert in eine Firebirddatenbank (Tabelle)

  Alt 4. Sep 2014, 15:12
Ich hatte eigentlich die Implementation gemeint. Fast noch wichtiger scheinen mir aber Neutral Generals Tipp bzw. meine anderen Fragen zu sein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Insert in eine Firebirddatenbank (Tabelle)

  Alt 4. Sep 2014, 15:59
Hallo Detlef,

ich habe den Code von einem Mitarbeiter übernommen aus Delphi 2007 (da hat alles funktioniert.). Warum der Except-Block leer ist keine Ahnung. Es läuft nicht in einer Transaktion, ich denke das regelt IBObjects von sich aus.

Bei mir wird alles bis auf Resname in die Tabelle geschrieben obwohl saveResource.Title = 'Test 1' ist.

Hallo Michael,

bei TIB_Connection gibt es so eine Option nicht.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Insert in eine Firebirddatenbank (Tabelle)

  Alt 4. Sep 2014, 16:11
Sorry hier die functionen:

Delphi-Quellcode:
function ExecuteSQL(const s: string; const Par: array of variant): Boolean;
  var Q: TIBOQuery;
      i: integer;
begin
     Q := TIBOQuery.Create(nil);
     try
        try
           Q.Databasename := dmMain.ibconMain.DatabaseName;
           Q.SQL.Text := s;
           for i := Low(Par) to High(Par) do
               case VarType(Par[i]) of
                    varSmallint ,
                    varInteger : Q.Params.Items[i].AsInteger := Par[i];
                    varSingle ,
                    varDouble : Q.Params.Items[i].AsFloat := Par[i];
                    varCurrency : Q.Params.Items[i].AsCurrency := Par[i];
                    varDate : begin
                                       if TDateTime(Par[i]) = 0 then begin
                                          Q.Params.Items[i].DataType := ftDate;
                                          Q.Params.Items[i].Clear;
                                       end
                                       else
                                           Q.Params.Items[i].AsDateTime := Par[i];
                                  end;
                    varBoolean : begin
                                    if Par[i] = True then
                                       Q.Params.Items[i].AsString := '1'
                                    else
                                        Q.Params.Items[i].AsString := '0';
                                  end;
                    varByte : Q.Params.Items[i].AsWord := Par[i];
                    varString : Q.Params.Items[i].AsString := Par[i];
                    varLongWord : Q.Params.Items[i].AsInteger := Par[i];
               end;
           Q.ExecSQL;
           Result := True;
        except
              Result := False;
              raise;
        end;
     finally
            Q.Close;
            FreeAndNil(Q);
     end;
end;

function ExecuteSQLEx(const s: string; const Par, prBlobParamsNumbers: array of const): Boolean;
  var bProcessed: boolean;
      Stream1: TStream;
      Q: TIBOQuery;
      i, j: integer;
begin
     Q := TIBOQuery.Create(nil);
     try
        try
           Q.Databasename := dmMain.ibconMain.DatabaseName;
           Q.SQL.Text := s;
           for i := Low(Par) to High(Par) do
               with Par[i] do begin
                    bProcessed := False;
                    for j := 0 to High(prBlobParamsNumbers) do begin
                        if i = prBlobParamsNumbers[j].VInteger - 1 then begin
                           if VType = vtString then begin
                              Stream1 := TStringStream.Create(VString^);
                              try
                                 Q.Params.Items[i].LoadFromStream(Stream1, ftMemo);
                              finally
                                     Stream1.Free;
                              end;
                           end
                           else
                           if VType = vtAnsiString then begin
                              Stream1 := TStringStream.Create(string(VAnsiString));
                              try
                                 Q.Params.Items[i].LoadFromStream(Stream1, ftMemo);
                              finally
                                     Stream1.Free;
                              end;
                           end
                           else
                           if VType = vtObject then begin
                              Stream1 := TMemoryStream.Create;
                              try
                                 if VObject.InheritsFrom(TBitmap) then begin
                                    if not TBitmap(VObject).Empty then begin
                                       TBitmap(VObject).SaveToStream(Stream1);
                                       Q.Params.Items[i].LoadFromStream(Stream1, ftBlob);
                                    end
                                    else begin
                                         Q.Params.Items[i].DataType := ftBlob;
                                         Q.Params.Items[i].Clear;
                                    end;
                                 end;
                                 if VObject.InheritsFrom(TStrings) then begin
                                    TStrings(VObject).SaveToStream(Stream1);
                                    Q.Params.Items[i].LoadFromStream(Stream1, ftMemo);
                                 end;
                              finally
                                     Stream1.Free;
                              end;
                           end
                           else
                           if VType = vtExtended then begin
                              if VExtended^ = 0 then begin
                                 Q.Params.Items[i].DataType := ftDate;
                                 Q.Params.Items[i].Clear;
                              end
                              else
                                  Q.Params.Items[i].AsDateTime := VExtended^;
                           end;
                           bProcessed := True;
                           Break;
                        end;
                    end;
                    if not bProcessed then
                       case VType of
                            vtInteger: Q.Params.Items[i].AsInteger := VInteger;
                            vtBoolean: begin
                                            if VBoolean = True then
                                               Q.Params.Items[i].AsString := '1'
                                            else
                                                Q.Params.Items[i].AsString := '0';
                                       end;
                            vtChar: Q.Params.Items[i].AsString := VChar;
                            vtExtended: Q.Params.Items[i].AsFloat := VExtended^;
                            vtString: Q.Params.Items[i].AsString := VString^;
                            vtAnsiString: Q.Params.Items[i].AsString := string(VAnsiString);
                            vtCurrency: Q.Params.Items[i].AsCurrency := VCurrency^;
                            vtObject: begin
                                      end;
                       end;
               end;
           Q.ExecSQL;
           Result := True;
        except
             Result := False;
             raise;
        end;
     finally
           Q.Close;
           FreeAndNil(Q);
     end;
end;
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Insert in eine Firebirddatenbank (Tabelle)

  Alt 4. Sep 2014, 17:40
Hallo,

< Bei mir wird alles bis auf Resname in die Tabelle geschrieben obwohl saveResource.Title = 'Test 1' ist. >

Woher weisst du das denn so genau ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Insert in eine Firebirddatenbank (Tabelle)

  Alt 8. Sep 2014, 10:13
Hm,

keine weiteren Antworten. Irgendwie wird in der Function ExecuteSQL die Zeit nicht richtig erkannt. Zeitwert ist z.B. '08:00:00'. Die Funktion macht ein '' daraus, womit natürlich der Wert in der Tabelle leer ist. Gibt es bei Delphi XE2 einen Anderen VarTyp für Zeit (Time) als in Delphi 2007, denn da funktionierte es noch richtig.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Insert in eine Firebirddatenbank (Tabelle)

  Alt 8. Sep 2014, 14:02
Du behandelst doch den Datentyp 'Time' gar nicht Ich kenne den DateTime-Datentyp als 'ftDateTime', aber das finde ich im Code nicht...
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Insert in eine Firebirddatenbank (Tabelle)

  Alt 8. Sep 2014, 14:18
Bislang (Delphi 2007) war es so das die Zeit als String abgehandelt wurde. Aber in Delphi XE2 wird dies irgendwie nicht akzeptiert. String wird einfach übersprungen.
Walter Landwehr
Mfg

Walter
  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 20: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