Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Prism Datenbanken und BDP... komfortables Einlesen von Daten? (https://www.delphipraxis.net/50245-datenbanken-und-bdp-komfortables-einlesen-von-daten.html)

Rexet 22. Jul 2005 14:18

Datenbank: MySQL • Zugriff über: BDP - Corelab-Komponenten

Datenbanken und BDP... komfortables Einlesen von Daten?
 
Hallo...

Ich hab vor kurzem geschafft erstmals Daten in meine kleine MySQL Datenbank einzulesen.
Nur muss ich das leider höchst unkomfortabel mittels vieler Parameter realisieren...

Der DataAdapter erzeugt z.B für meine Insert-Anweisung folgenden Code:

Delphi-Quellcode:
INSERT INTO projektverwaltung.tmitarbeiter(gruppeID, titel, name, vorname, erstelltvonID, erstelltvonkuerzel) VALUES (?, ?, ?, ?, ?, ?)
Jetzt liegt es halt an mir das ganze zu befüllen. Bei der Update Anweisung sieht es gleich aus, nur muss ich noch einen Parameter extra für die momentane Position in der Tabelle mitgeben.

Delphi-Quellcode:
UPDATE projektverwaltung.tmitarbeiter SET gruppeID = ?, titel = ?, name = ?, vorname = ?, erstelltvonID = ?, erstelltvonkuerzel = ? WHERE ID = ?
Ich hab also probiert die Tabelle zu öffnen,einen Wert zu ändern und danach abzuspeichern.
Für diesen Zweck benutze ich Eingabefelder welche ich mit der Eigenschaft "Databindings" an die Felder im Dataset geknüpft hab.
Nun die Probleme:

* Eigentlich sollte die "Databindings" in beide Richtungen funktioneren, bei mir anscheinend aber nur zum lesen.
* Die Methode "Update(dataset)" des Dataadapters erkennt nicht, wenn ich Daten editiere oder einfüge. Sondern tragt bei mir nur eine neue Kopie des alten Datensatzes ein, anstatt einen alten zu verändern oder einen neuen einzfügen.
* Ich muss dem Programm explizit sagen, ob es einen Wert löschen, editieren oder einfügen soll, die Methode Update die sich eigentlich um die Entscheidung kümmern sollte, tut genau das nicht.
* Wo sind so nette Befehle wie "first, next, post, usw" hin? Warum muss ich mich um alle SQL-Operationen selbst kümmern?

Gibt es also irgendwie einen einfacheren Weg, ohne ein Datagrid zu benützen?
Danke, D.

Texas 25. Jul 2005 00:49

Re: Datenbanken und BDP... komfortables Einlesen von Daten?
 
Hallo Rexet

Ich arbeite eigentlich nur mit Interbase aber ich glaube bei MySQL geht das auch

Eine Query für MySQL anlegen

Query1.sql.clear;
Query1.sql.add(‘ select count(ID) as Menge from projektverwaltung.tmitarbeiter where ID = :SID’);
Query1.parambyname(‘SID’).AsInteger = ID der Quelle
Query1. ExecSQL;
If Query1.Fieldbyname(‘Menge’)AsInteger > 0 then
Update …
Else
Insert ….


Gruss Texas

Rexet 25. Jul 2005 10:16

Re: Datenbanken und BDP... komfortables Einlesen von Daten?
 
Zitat:

Zitat von Texas
Hallo Rexet

Ich arbeite eigentlich nur mit Interbase aber ich glaube bei MySQL geht das auch

Eine Query für MySQL anlegen

Query1.sql.clear;
Query1.sql.add(‘ select count(ID) as Menge from projektverwaltung.tmitarbeiter where ID = :SID’);
Query1.parambyname(‘SID’).AsInteger = ID der Quelle
Query1. ExecSQL;
If Query1.Fieldbyname(‘Menge’)AsInteger > 0 then
Update …
Else
Insert ….


Gruss Texas

Hey Texas!

Danke für die Antwort.

Ich hab unter .NET das Problem daß ich sowas unkompliziertes wie ein Query nicht mehr benutzen kann, aber ich finde deine Idee gut und werd mal probieren, damit mein Problem zu lösen.

r_kerber 25. Jul 2005 11:00

Re: Datenbanken und BDP... komfortables Einlesen von Daten?
 
Moin Rexet,

Zitat:

Zitat von Rexet
Ich hab unter .NET das Problem daß ich sowas unkompliziertes wie ein Query nicht mehr benutzen kann, aber ich finde deine Idee gut und werd mal probieren, damit mein Problem zu lösen.

Dafür gibts doch die bdpCommand-Komponente mit der Eigenschaft CommandText.
Und wo ich gerade dabei bin:
Zitat:

Zitat von Rexet
Wo sind so nette Befehle wie "first, next, post, usw" hin? Warum muss ich mich um alle SQL-Operationen selbst kümmern?

First, next, etc gibt's nicht mehr. Über ein .net-Dataset hangelt man sich via Datensatz-Index: Looping through a .NET DataSet - by Anders Ohlsson.

Texas 26. Jul 2005 00:12

Re: Datenbanken und BDP... komfortables Einlesen von Daten?
 
Hallo Rexet
ich habe mir noch mal ein wenig :gruebel:

Kannst Du nicht eine Stored Procedure in deiner Datenbank einfügen


z.B.

Delphi-Quellcode:
CREATE PROCEDURE INSUPD_ARTIKEL (
    AART_ID INTEGER,
    AART_NR VARCHAR(20),
    AART_BEZ VARCHAR(40),
    AART_EKP NUMERIC(15,4),
    AART_EKPMENGE NUMERIC(10,4),…)

AS
BEGIN

  /* Artikel_id wurde nicht mit übergeben */
  IF ((aart_id IS NULL) OR (aart_id < 0)) THEN BEGIN
    /* neue Artikel_id bestimmen */
    aart_id = gen_id(artikel_id_gen, 1);
  END

  new_art_id = :aart_id;
 
  /* Datensatz einfügen */
  INSERT INTO artikel
  (
    art_id      ,
    art_nr      ,
    art_bez     ,
    art_ekp     ,
    art_ekpmenge ,´...
  )
  VALUES
  (
    :aart_id      ,
    :aart_nr      ,
    :aart_bez     ,
    :aart_ekp     ,
    :aart_ekpmenge ,...);

 
  /* Doppelter Primärindex  */
  WHEN SQLCODE -803 DO BEGIN

    UPDATE artikel
    SET  
      art_id      = :aart_id         ,
      art_nr      = :aart_nr         ,
      art_bez     = :aart_bez        ,
      art_ekp     = :aart_ekp        ,
      art_ekpmenge = :aart_ekpmenge   ,...
    WHERE
      art_id     = :aart_id;
    END
END
Gruß Michael

Rexet 26. Jul 2005 13:02

Re: Datenbanken und BDP... komfortables Einlesen von Daten?
 
Zitat:

Zitat von Texas
Hallo Rexet
ich habe mir noch mal ein wenig :gruebel:

Kannst Du nicht eine Stored Procedure in deiner Datenbank einfügen

...

Soweit ich weiß hat MySQL leider nicht die Möglichkeit dazu stored procedures zu verwenden..... (*mich an interbase zurückerinnere* :cry: )

Rexet 26. Jul 2005 13:08

Re: Datenbanken und BDP... komfortables Einlesen von Daten?
 
Zitat:

Zitat von r_kerber
Moin Rexet,

Zitat:

Zitat von Rexet
Ich hab unter .NET das Problem daß ich sowas unkompliziertes wie ein Query nicht mehr benutzen kann, aber ich finde deine Idee gut und werd mal probieren, damit mein Problem zu lösen.

Dafür gibts doch die bdpCommand-Komponente mit der Eigenschaft CommandText.
Und wo ich gerade dabei bin:
Zitat:

Zitat von Rexet
Wo sind so nette Befehle wie "first, next, post, usw" hin? Warum muss ich mich um alle SQL-Operationen selbst kümmern?

First, next, etc gibt's nicht mehr. Über ein .net-Dataset hangelt man sich via Datensatz-Index: Looping through a .NET DataSet - by Anders Ohlsson.

Oh... "BDPCommand" wurde von mir übersehen... danke (Hab mir gedacht, das ist nur zum Ausführen von SQL-Statements, die keine Ergebnismenge zurückliefern)

Und Danke für den Link, ich werd mir den gleich vornehmen... :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 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 by Thomas Breitkreuz