AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi dbexpress Uni-Direktionale Datenbank zurück schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

dbexpress Uni-Direktionale Datenbank zurück schreiben

Ein Thema von Sven Janssen · begonnen am 10. Mai 2005 · letzter Beitrag vom 14. Jun 2010
Antwort Antwort
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#1

dbexpress Uni-Direktionale Datenbank zurück schreiben

  Alt 10. Mai 2005, 12:04
Datenbank: Informix • Version: 6SE • Zugriff über: Luxena
Hallo,

ich bin dabei ein Delphi Programm zu schreiben welches über dbexpress Komponenten aus einer Informix Datei liest. Nun sollen Änderungen gemacht werden und diese wieder zurück geschrieben werden. Damit ich mir viel Schreibarbeit spare würde ich das gern wie bei einem TTable handhaben. Sprich die Tabelle mit .edit in den Editmodus setzen, Felder vom Typ TDBEdit ändern und mit .post das ganze zurück schreiben.

Dafür bin ich folgeneds Tutorial durchgegangen:
http://gethelp.devx.com/techtips/del...0min0701-1.asp

Was funktioniert:
Ich habe also eine TSQLConnection, ein TSQLDataSet um die Daten auszulesen. Ich habe ein TDataSetProvider welches mit dem TSQLDataSet verbunden ist.
Dazu kommt ein TClientDataSet welches mit dem TDataSetProvider verbunden ist.
Die DBEdit Felder sind mit einer TDataSource verbunden welches als DataSet das TClientDataSet verbunden hat.
Nun setze ich das TClientDataSet in den edit Modus und ich kann in den DBEdit Feldern den Inhalt verändern.

Was NICHT funktioniert:
Sobald ich aber post Aufrufe erhalte ich die Meldung
"<TClientDataSet> : Diese Operation ist bei einer unidirektionalen Datenmenge nicht gestattet"
Da die Meldung in Deutsch ist und nicht in Englisch, denke ich das die Meldung direkt von der Komponente kommt. Die Meldung vom Luxena Treiber und von Informix sind alle in Englisch.

Hoffe jemand hat ne Lösung und ich habe einfach nur etwas übersehen.
Ich weiß zwar das dies auch über TSQLConnection.execute() geht, aber genau dieser Weg ist mir für die Zukunft zu Aufwendig.

Gruß Sven
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: dbexpress Uni-Direktionale Datenbank zurück schreiben

  Alt 10. Mai 2005, 12:18
AFAIK ist dein Problem genau der Schwachpunkt der dbExpress-Architektur. Du must über andere SQL-Komponenten die Daten wieder zurückschreiben und kannst nicht die schon vorhandenen Reader dafür nehmen.

Aber wieso nimmst du nicht einfache TDataset-Nachfolger wie SQLDirect und arbeitest so wie mit TTable/TQuery gewohnt?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#3

Re: dbexpress Uni-Direktionale Datenbank zurück schreiben

  Alt 10. Mai 2005, 14:06
Ich schreibe ja gar nicht über die dbexpress Komponenten zurück, sondern über TDataSet. Dieses soll das ganze ja auch unterstützen. In der Delphi6 Hilfe wird dieser Lösungsweg auch angesprochen.
SQLDirect sagt mir nun erstmal nichts.

Ne also nochmal Geld in die Handnehmen habe ich ehrlich gesagt keine Lust. Delphi+Luxena+Informix und dann auch noch SQL Direkt.

Sven *seufz*
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
Benutzerbild von Marcel Gascoyne
Marcel Gascoyne

Registriert seit: 18. Nov 2003
Ort: Uetersen
271 Beiträge
 
Delphi 2005 Architect
 
#4

Re: dbexpress Uni-Direktionale Datenbank zurück schreiben

  Alt 10. Mai 2005, 14:46
DBExpress unterstützt nur unidirektionale Datenmengen, sprich man kann nur vorwärts navigieren. Du brauchst also eine Komponente zum Zwischenspeichern der Ergebnismenge. Hierfür gibt es das ClientDataSet. Schau Dir mal die Dokumentation zu DBExpress an oder such mal nach einem Tutorial.

Wie mein Vorredner schon gesagt hat ist SQLDirect eine gute alternative, allerdings nicht kostenfrei. Die paar Euros ist die Komponente aber allemal wert, ich setzte diese schon seit Jahren ein und bin damit mehr als zufrieden.

Gruß,
Marcel
Marcel Gascoyne
Der Fehler sitzt immer vor der Tastatur
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#5

Re: dbexpress Uni-Direktionale Datenbank zurück schreiben

  Alt 10. Mai 2005, 15:17
@marcel
Du hast meinen Beitrag gelesen oder? Dort habe ich doch beschrieben wie ich die aten zurück schreiben möchte. Dazu habe ich sogar ein Tutorial gelinkt nachdem ich es implementiert habe und es funktioniert nicht.
Ich weiß das ich über dbexpress nicht schreiben kann und gehe daher über ein TClientDataSet.

TClientDataSet.edit funktioniert, ich kann in den DBEdit Feldern dann editieren. aber sobald ich TClientDataSet.post aufrufe erhalte ich einen Fehler.

Gruß Sven
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
Benutzerbild von DeepCopy
DeepCopy

Registriert seit: 5. Aug 2008
Ort: Gießen
21 Beiträge
 
Lazarus
 
#6

Re: dbexpress Uni-Direktionale Datenbank zurück schreiben

  Alt 16. Okt 2008, 20:48
Die Lösung in diesem Fall lautet ClientDataSet1.ApplyUpdates(-1); das setzen des Edit Zustands und anschliessender Post Aufruf
im TClientDataSet ist nicht notwendig/möglich, da es sich um einen Daten-Snapshot
handelt.

Grundsätzlich ist das TClientDataSet datenbankunabhänig und
schreibt d.h. auch nicht automatsch geänderte Daten via Edit/Post direkt zurück zur Datenquelle.
Das gilt für alle DB-Aktionen wie das Einfügen/Ändern und Löschen.

Wenn mann vermeiden möchte das die Daten im DB-Control geändert werden kann man
einfach die AutoEdit Eigenschaft der TDataSource Komponente auf
False setzen.
Andreas
Gruß Andreas
---------------------------------------------------
Sic Luceat Lux (so lasse das Licht erstrahlen)
- ich kam sah und wusste nichts -
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: dbexpress Uni-Direktionale Datenbank zurück schreiben

  Alt 16. Okt 2008, 22:58
Wieso wird ein fast 3 1/2 Jahre alter Thread wieder ausgepackt
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
tomes-one

Registriert seit: 28. Mai 2009
27 Beiträge
 
#8

AW: dbexpress Uni-Direktionale Datenbank zurück schreiben

  Alt 14. Jun 2010, 13:50
ist doch super, dass der thread am ende noch eine super lösung bekommen hat.

thanks an DeepCopy
  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 19:55 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