AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Daten mit DataSet in Datenbank schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Daten mit DataSet in Datenbank schreiben

Ein Thema von fapsons · begonnen am 12. Mär 2007 · letzter Beitrag vom 12. Mär 2007
Antwort Antwort
fapsons

Registriert seit: 29. Jan 2007
Ort: Berlin
65 Beiträge
 
#1

Daten mit DataSet in Datenbank schreiben

  Alt 12. Mär 2007, 08:28
Datenbank: Firebird • Version: 2.0 • Zugriff über: InterBase
Hallo Leute,

habe mir folgende Procedure um Daten aus meiner Firebirddatenbank auszulesen geschrieben.
Nun habe ich ne ganz einfache Frage. Wie muss ich eine zweite Procedure schreiben, um die gleichen Felder auf die Datenbank zu schreiben?

Vielen Dank schon mal.

-fapsons--


Delphi-Quellcode:
procedure Get_DB_Values; // Auslesen Kundennamen aus DB
var i, j, k :Integer;
begin
   ...
   with D_DataModule.DataSet do
   begin
       SelectSQL.Clear;
       SelectSQL.Text := 'select upper(f.fname), f.fa_bez, f.faid from FIRMA f where f.haendler = ''N'' and f.stat <> ''D'' order by 1 asc';
       Open;
   end;

   while not D_DataModule.DataSet.Eof do
   begin
       reg.customer[reg.Ac_ID].ID := D_DataModule.DataSet.FieldByName('FAID').Value;
       reg.Customer[reg.Ac_ID].Company := D_DataModule.DataSet.FieldByName('UPPER').Value;
       reg.Customer[reg.Ac_ID].CompanyType := D_DataModule.DataSet.FieldByName('FA_BEZ').Value;
       D_DataModule.DataSet.Next;
      ...
   end;
   ...
   D_DataModule.DataSet.Close;
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Daten mit DataSet in Datenbank schreiben

  Alt 12. Mär 2007, 08:46
Am besten so :

Delphi-Quellcode:
   with D_DataModule.DataSet do
   D_DataModule.DataSet.Edit;
   while not D_DataModule.DataSet.Eof do begin
      D_DataModule.DataSet.FieldByName('FAID').AsInteger;
      reg.customer[reg.Ac_ID].ID; ...
   end;
   D_DataModule.DataSet.Post;
   ...
   D_DataModule.DataSet.Close;
[/quote]

P.S.: das Value würde ich mir abgewöhnen. Habe z.B. jetzt nur geraten, ob es überhaupt um integer geht.
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Daten mit DataSet in Datenbank schreiben

  Alt 12. Mär 2007, 08:51
Zitat:
P.S.: das Value würde ich mir abgewöhnen. Habe z.B. jetzt nur geraten, ob es überhaupt um integer geht.
Kannst du das auch begründen?
Markus Kinzler
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#4

Re: Daten mit DataSet in Datenbank schreiben

  Alt 12. Mär 2007, 09:28
Zitat:
Zitat von Hansa:
Am besten so :

Delphi-Quellcode:
   with D_DataModule.DataSet do
   D_DataModule.DataSet.Edit;
   while not D_DataModule.DataSet.Eof do begin
      D_DataModule.DataSet.FieldByName('FAID').AsInteger;
      reg.customer[reg.Ac_ID].ID; ...
   end;
   D_DataModule.DataSet.Post;
   ...
   D_DataModule.DataSet.Close;
P.S.: das Value würde ich mir abgewöhnen. Habe z.B. jetzt nur geraten, ob es überhaupt um integer geht.
Vergiss es, so läuft es nicht.

Erstmal frage ich mich, ob es überhaupt gehen würde. Schließlich ist das kein einfacher SELECT * sondern mit Funktionen. Zum anderen ÜBERSCHREIBST du die Zeilen einfahc (Edit) statt anzuhängen.

Besser ist:

Delphi-Quellcode:
var
  Query: TADOQuery;
...
Query := TADOQuery.Create(nil);
Query.Connection := ...;
Query.SQL.Text := 'INSERT INTO tabelle (feld1, feld2, ...) VALUES (:feld1, :feld2, ...)';
Query.Parameters.ParamByName('feld1').Value := ...;
...
Query.Execute;
Query.Free;
Oder alternativ:

Delphi-Quellcode:
var
  Query: TADOQuery;
...
Query := TADOQuery.Create(nil);
Query.Connection := ...;
Query.SQL.Text := 'SELECT * FROM tabelle WHERE 1=0';
Query.Open;
Query.Append;
Query.FieldByName('feld1').Value := ...;
...
Query.Post;
Query.Close;
Query.Free;
hab das jetzt nicht komplett ausprobiert, kann sein dass hier und da kleine Fehler sind. Z.B. kann es sein, dass TADOQuery dir mit deiner DB nichts nützt. Bei anderen Datasets heißt es dann nicht Parameters.ParamByName sondern Params.ParamByName. Aber grob stimmt es so jedenfalls.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Daten mit DataSet in Datenbank schreiben

  Alt 12. Mär 2007, 17:14
Oh je, Chaos-Thread.

Zitat von mkinzler:
Zitat:
P.S.: das Value würde ich mir abgewöhnen. Habe z.B. jetzt nur geraten, ob es überhaupt um integer geht.
Kannst du das auch begründen?
Begründung ?

abc.xy := D_DataModule.DataSet.FieldByName('FAID').Value; Ist da irgendein Hinweis auf den zu verwendenden Datentyp auf Anhieb und ohne zu testen zu erkennen ? Testen würde in diesem Fall Try and Error bedeuten.

Zitat von bttb930:
Vergiss es, so läuft es nicht.
...
Erstmal frage ich mich, ob es überhaupt gehen würde. Schließlich ist das kein einfacher SELECT * sondern mit Funktionen.
...
hab das jetzt nicht komplett ausprobiert, kann sein dass hier und da kleine Fehler sind. Z.B. kann es sein, dass TADOQuery dir mit deiner DB nichts nützt
...
Aber grob stimmt es so jedenfalls.
Wieso soll was nicht laufen ?
Welche "Funktionen" ?
Wieso bringst du ADO unnötig ins Spiel ?

Zur Frage an sich : das ganze ist lediglich eine Zuweisung, bei der geklärt sein muss, was rechts und was links steht ( ":=" ). Der Typ rechts und links muss übereinstimmen. Als Zusatzbegründung : dem Value als Variant ist der Typ auch egal.
Gruß
Hansa
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#6

Re: Daten mit DataSet in Datenbank schreiben

  Alt 12. Mär 2007, 17:33
Zitat von Hansa:
Zitat von bttb930:
Vergiss es, so läuft es nicht.
...
Erstmal frage ich mich, ob es überhaupt gehen würde. Schließlich ist das kein einfacher SELECT * sondern mit Funktionen.
...
hab das jetzt nicht komplett ausprobiert, kann sein dass hier und da kleine Fehler sind. Z.B. kann es sein, dass TADOQuery dir mit deiner DB nichts nützt
...
Aber grob stimmt es so jedenfalls.
Wieso soll was nicht laufen ?
Welche "Funktionen" ?
Wieso bringst du ADO unnötig ins Spiel ?
Nicht erst schreiben sondern erst lesen. Zu den drei Fragen:

a) Probier's halt aus. Ich habs ja auch erklärt: Du hängst nichts an sondern überschreibst höchstens.
b) Lies doch mal: "select upper(f.fname), ...". Upper ist eine Funktion.
c) Warum nicht? Hab ja dazu geschrieben, dass es sein kann, dass man statt TADOQuery was anderes verwenden muss.
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#7

Re: Daten mit DataSet in Datenbank schreiben

  Alt 12. Mär 2007, 17:37
Um das nochmal deutlich zu sagen: Der von dir geschriebene Quelltext ist absolut laufunfähig. Was machst du da eigentlich???

Erklär ihn mal bevor du weiter fragst, warum ich glaube dass er nicht lauffähig ist.

da ist jede zeile unlogisch...

Zitat von Hansa:
Am besten so :

Delphi-Quellcode:
   with D_DataModule.DataSet do
   D_DataModule.DataSet.Edit;
   while not D_DataModule.DataSet.Eof do begin
      D_DataModule.DataSet.FieldByName('FAID').AsInteger;
      reg.customer[reg.Ac_ID].ID; ...
   end;
   D_DataModule.DataSet.Post;
   ...
   D_DataModule.DataSet.Close;
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Daten mit DataSet in Datenbank schreiben

  Alt 12. Mär 2007, 17:46
Zitat von bttb930:
..Erklär ihn mal bevor du weiter fragst, warum ich glaube dass er nicht lauffähig ist.
...
da ist jede zeile unlogisch...
Was du glaubst ist mir egal. Mit ... und ... abgekürzter Fragesteller-Quelltext wird durch bloßes F9-Drücken kaum laufen. Delphi dürfte z.B. hier :

      D_DataModule.DataSet.FieldByName('FAID').AsInteger; schon eine Fehlermeldung präsentieren. Außerdem gibt es noch FieldByName <F1>.
Gruß
Hansa
  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 08:41 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