![]() |
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:
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.
INSERT INTO projektverwaltung.tmitarbeiter(gruppeID, titel, name, vorname, erstelltvonID, erstelltvonkuerzel) VALUES (?, ?, ?, ?, ?, ?)
Delphi-Quellcode:
Ich hab also probiert die Tabelle zu öffnen,einen Wert zu ändern und danach abzuspeichern.
UPDATE projektverwaltung.tmitarbeiter SET gruppeID = ?, titel = ?, name = ?, vorname = ?, erstelltvonID = ?, erstelltvonkuerzel = ? WHERE ID = ?
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. |
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 |
Re: Datenbanken und BDP... komfortables Einlesen von Daten?
Zitat:
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. |
Re: Datenbanken und BDP... komfortables Einlesen von Daten?
Moin Rexet,
Zitat:
Und wo ich gerade dabei bin: Zitat:
![]() |
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:
Gruß Michael
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 |
Re: Datenbanken und BDP... komfortables Einlesen von Daten?
Zitat:
|
Re: Datenbanken und BDP... komfortables Einlesen von Daten?
Zitat:
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