Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank - Schreibend Zugreifen? (https://www.delphipraxis.net/135274-datenbank-schreibend-zugreifen.html)

Highttower 8. Jun 2009 12:44

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBX

Datenbank - Schreibend Zugreifen?
 
Hallo zusammen,

ich bin hier fast am wahnsinnig werden ... und vermutlich liegt es nur an meiner eigenen Dummheit ... wie so oft -.-. Ich suche eine Funktion mit der ich einfach in eine Datenbank (Firebird 2.1) SCHREIBEN kann ... ich bin schon den ganzen morgen am suchen und kann jetzt auf 4 arten Daten lesen aber ich find kein beispiel zum schreiben.

Wenn kann mich irgendwer von euch von meinem Leiden erlösen?

Vielen lieben Dank,


EDIT: Alter Titel: "Datenbank - Schreibend Zugreifen - Zu blöd zum Googlen???"
Neuer Titel: "Datenbank - Schreibend Zugreifen?"

mkinzler 8. Jun 2009 12:47

Re: Datenbank - Schreibend Zugreifen - Zu blöd zum Googlen??
 
Einfach per SQL :zwinker:
SQL-Code:
Insert into <Tabelle> (<Feldliste>) values (<Werte>);

Highttower 8. Jun 2009 13:49

Re: Datenbank - Schreibend Zugreifen - Zu blöd zum Googlen??
 
Hab ich ja versucht etwa so:
Delphi-Quellcode:
for I :=0 to List1.Count -1 begin
    for K := 0 to List2.Count -1 begin
        DBM.IBSQL1.SQL := DBM.IBSQL1.SQL + 'insert into '
            + 'Feldname1; Feldname2+; Feldname3'
            + ' values '
            + (TotalkomplexeStruktur.UnterKlasse.ObjectList.Item[I] as TCastKlasse).Item[K] as string)
            + ',';
    end;
...
    DBM.IBSQL1.ExecQuery;
end;
Der mag aber die normalen '' Strings nicht :(, gibt es keine Methode die ich irgendwie überladen kann wo ich sagen kann:

[PSEUDOCODE]

Datenbank.Connect;
AddRow(TotalKomplizierterDatenTyp);

procedure AddRow(TotalKomplizierterDatenTyp : TTotalKomplizierterDatenTyp);
begin

Schleife mit I
Field[I]:=TotalKomplizierterDatenTyp.Item[I]

end;

[/PSEUDOCODE]

Viele Grüße

EDIT:
:wall: :wall: :wall: :wall: :wall:

StringList ... sry done... -.-

hoika 8. Jun 2009 14:42

Re: Datenbank - Schreibend Zugreifen?
 
Hallo,

du solltest dein .SQL mal vor dem ExecQuery ansehen (ShowMessage),
dann siehst du auch, was du verkehrt machst.


1.
ein normales SQL Insert beginnt erst mal so

SQL-Code:
Insert Into Table1(Feld1,Feld2,Feld3) ...
Du schreibst aber statt dem Komma ein Semikolon, wozu ?
Ausserdem ein +, was hier überhaupt nicht hingehört,
und es fehlt die Klammer ) am Ende

'Feldname1; Feldname2+; Feldname3'


Zu deinem String-Problem, benutze Parameter.

Delphi-Quellcode:
var
  CastKlasse : TCastKlasse;
  sFieldValue : String; // damit man das auch mal Debuggen kann
begin
 
 ...

  DBM.IBSQL1.SQL:= 'Insert Into Table1(Feld1,Feld2,Feld3)'
                +'Values(:Feld1,:Feld2,:Feld3)';
  CastKlasse:= TCastKlasse(TotalkomplexeStruktur.UnterKlasse.ObjectList.Item[I]); // oder so ähnlich
  sFieldValue:= CastKlasse).Item[K]);
  DBM.IBSQL1.ParamByName('Feld1').AsString:= sFieldValue;
Dein DBM.IBSQL1.SQL := DBM.IBSQL1.SQL + XXX
macht auch nicht viel Sinn, weil das SQL-Statement immer länger wird in der Art

'Insert Into XX Insert Into YY '

Einzige Grund wäre, wenn die Felder in deiner List1 zu verschiedenen Tabellen
gehören würden und die Anzahl variabel ist.
Das ist aber nicht ersichtlich, weil meine Glaskugel List1 und List2 nicht kennt.


Edit:
TotalKomplizierterDatenTyp sollte durch lokale Variable zumindestens soweit
vereinfacht werden, dass man das debuggen kann (Watch-Point).


Heiko

Highttower 8. Jun 2009 15:53

Re: Datenbank - Schreibend Zugreifen?
 
Hallo,

ja wie oben im Edit schon gesagt, ich habs soweit gelöst, stehe jetzt allerdings vorm nächsten Problem, wie wandle ich ein DateTime von Delphi in ein DateTime von Firebird? Geht das überhaupt? FloatToStr und DateTimeToStr gehn beide nicht, auch abendteuerliche Funktionen wie berechne die Zeit in sekunden von 1970 bis da hin gehn nicht ... jmd ne Idee?

Vielen Dank

Tobi

Jürgen Thomas 8. Jun 2009 16:01

Re: Datenbank - Schreibend Zugreifen?
 
Hier gilt erst recht: Benutze Parameter, dann übernimmt IBX die Konvertierung. Dann ist aber nicht Param(..).AsString zu verwenden, sondern Param(...).AsDateTime o.ä. Jürgen

mkinzler 8. Jun 2009 16:01

Re: Datenbank - Schreibend Zugreifen?
 
Mach dich mal über (SQL-)Parameter schlau

Highttower 9. Jun 2009 11:58

Re: Datenbank - Schreibend Zugreifen?
 
Hallo zusammen,
nach langem weiter googeln und viel rum gefrage bin ich auf die TIBTable gestoßen die genau das macht was ich wollte.

Vielen dank für eure Mühen, und verzeiht das ich mich mit Delphi noch recht unbeholfen anstelle, ich arbeite erst seit 2 Wochen mit dieser Sprache.

Grüße

Tobi

hoika 9. Jun 2009 13:40

Re: Datenbank - Schreibend Zugreifen?
 
Hallo,

das hätte ich dir auch sagen können, habe ich aber nicht.

TIBTable ist nur wegen der "Abwärtskompatibilität" zur BDE drin
und sollte nicht verwendet werden.


Heiko

alzaimar 9. Jun 2009 13:41

Re: Datenbank - Schreibend Zugreifen?
 
Zitat:

Zitat von hoika
...und sollte nicht verwendet werden.

Warum nicht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 Uhr.
Seite 1 von 2  1 2      

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