Autor Beitrag
roebi
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 10.04.08 14:04 
Hallo Freunde,
Ich speichere ein DataSet in eine xml-Datei (SaveToFile). Dann Lade ich die Daten später in ein DataSet mit LoadFromFile. Geht wunderbar. Nur bringe ich auf keine Art und Weise die Daten wieder in die Access-Tabelle. Mit update, BatchUpdate, post usw. Keine Spur-die Daten bleiben im DataSet, kommen aber nie in die Tabelle, wo sie hingehören.
Habe in gescheiten Büchern nachgesehen, dort geht es (scheinbar), bei mir aber nicht. Delphi 6 Enterprise.
Danke für Hinweise! Roebi
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 12.04.08 11:39 
:welcome:

*grübel* überprüfe mal, ob deine (access?)Tabelle mit dem DataSet verbunden ist.

sry, wenn ich mist erzähle, dass ist schon n weilchen her ^^ aber die Verbindung zwischen den Komponenten solltest du mal überprüfen.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
roebi Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 13.04.08 22:22 
Titel: LoadFromFile
user profile iconXion hat folgendes geschrieben:
:welcome:

*grübel* überprüfe mal, ob deine (access?)Tabelle mit dem DataSet verbunden ist.

sry, wenn ich mist erzähle, dass ist schon n weilchen her ^^ aber die Verbindung zwischen den Komponenten solltest du mal überprüfen.


Danke für den Hinweis und den Willkommens-Smily.
Ich glaube schon, dass das DataSet mit der Access-Tabelle verbunden ist. Ich habe die Verbindung (mit ADOConnection) nochmals getrennt und wieder aktiviert, aber das hilft auch nichts. Ich grüble mal weiter. Vielleicht weiss doch noch jemand, wo das Problem liegen könnte.
Gruss Röbi
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Di 15.04.08 11:43 
:gruebel:
das ist ja kompliziert ;) naja, jetzt läuft bei mir...

Also wenn die Datenbank normal läuft, kann ich auch einfach LoadfromFile benutzen. Man muss halt vorher die ganzen Verbindungen machen.

DBGrid zu DataSource
DataSource zu ADODataSet
ADODataSet richtig einrichten (CommandText/Connection), wobei mich das teil nervt ;) verwende doch die normale ADOConnection und ein Query.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
roebi Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 15.04.08 17:34 
Hallo Xion,
Danke für deine Mühe, mir zu helfen. Die Verbindungen sind schon ok, aber die Daten bringe ich trotzdem nicht vom Dataset zur Tabelle.
Nützt alles updatebatch nichts.
Habe ein Replikationsbeispiel aus dem Doberenz/Kowalski nachgebaut, funktioniert aber auch nicht - das Original von der Buch-CD sowieso nicht. Die Tabelle bleibt auch da leer.

Vielleicht liegt es daran, dass ich Datensätze, die vorher schon in der Tabelle waren, ohne etwas neues dazuzufügen, vom File wieder in die inzwischen geleerte Tabelle zurückschreiben möchte (so als backup/restore). Vielleicht geht updatebatch nur mit geänderten oder neuen Datensätzen. Die Statuseigenschaften der Records sind mir zu tief in den ADO's, da muss ich wohl passen, und eine andere Lösung finden. Danke trotzdem - oder weiss sonst noch jemand etwas über UpdateBatch, das in keinem Buch steht??
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 16.04.08 14:27 
also ich hab garkein UpdateBatch gebraucht.

Ich hab einfach SaveToFile genommen. Danach hab ich das DataSet auf Active=False gestellt und mit LoadFromFile geladen => läuft.

Hilfe hat folgendes geschrieben:

Batch-Aktualisierungen in Datenbanktabellen eintragen

Ausstehende Datenänderungen, die noch nicht eingetragen oder verworfen wurden, werden durch Aufruf der Methode UpdateBatch in Datenbanktabellen eingetragen. Für Datensätze, die geändert wurden und in die Datenbank zurückgeschrieben werden sollen, werden die Änderungen in die Datenbanktabelle eingetragen, auf der die Datensatzmenge basiert. Wenn Datensatz zum Löschen markiert und die Änderung zwischengespeichert wurde, wird der entsprechende Datensatz in der Datenbanktabelle gelöscht. Ein einzufügender Datensatz (der nur im Zwischenspeicher, aber nicht in der Datenbanktabelle vorhanden ist) wird zur Datenbanktabelle hinzugefügt. Für geänderte Zeilen werden die Spalten in den entsprechenden Datensätzen der Datenbanktabellen anhand der neuen Werte der Spalten im Zwischenspeicher aktualisiert.

Wird die Methode UpdateBatch ohne Parameter aufgerufen, werden alle ausstehenden Aktualisierungen übernommen. Optional kann UpdateBatch ein TAffectRecords-Wert als Parameter übergeben werden. Wenn Sie einen anderen Wert als arAll übergeben, wird immer nur eine Teilmenge der ausstehenden Änderungen in die Datenbank eingetragen. Die Übergabe von arAll bewirkt dasselbe, wie ein Aufruf ohne Parameterangabe, nämlich dass alle anstehenden Änderungen eingetragen werden. Im folgenden Beispiel wird nur der Datensatz eingetragen, der gerade aktiv ist:
ADODataSet1.UpdateBatch(arCurrent);


//Edit:
also schaden tut das UpdateBatch nicht ^^ es geht trotzdem bei mir. Es muss irgendwo nen andrer Fehler sein. Was mir so einfällt:
> SaveToFile Dateiname = LoadFromFile Dateiname
> bedenke auch dabei, dass sich das "Rootverzeichnis", in dem Windoof arbeitet, sich ändern kann, also folgendermaßen machen: Path:=ExtractFilePath(Application.ExeName)+'test.xyz';
> wie angesprochen, die Verbindungen (ggf. ändert sich da was im Programmablauf?)
> speicherst du auf die CD? (mag sich dumm anhören, kann aber leicht mal passieren ;) )
> hast du Schreibzugriff auf die Daten? (ggf. könnte fehlender Schreibzugriff ein Problem darstellen)
> tausende andere mögliche Bugs ;)

//Edit2:
was genau meinst du im ersten Post mit "Accesstabelle"? Das DBGrid?

//Edit3:
user profile iconroebi hat folgendes geschrieben:

da muss ich wohl passen, und eine andere Lösung finden.

nicht gleich den Sand in den Kopf stecken :mrgreen:
du könntest z.B. mal deinen relevanten Code zeigen o.ä.

//Edit4:
zum Vergleich mal mein DB-Komponenten aus der .dfm
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
  object ADODataSet1: TADODataSet
    ConnectionString = 
      'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\gesamt.mdb;Persist Security In' +
      'fo=False'
    CursorType = ctStatic
    CommandText = 'select *  from [projekt erdkunde]'
    Parameters = <>
    [...]
  end

  object DataSource1: TDataSource
    DataSet = ADODataSet1
    [...]
  end

  object DBGrid1: TDBGrid
    [...]
    DataSource = DataSource1
    [...]
  end

hängt natürlich auch von deiner Datenbank ab, bei mir wars ne normale Access-Datenbank (mdb) => Microsoft.Jet.OLEDB.4.0

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
roebi Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 27.04.08 22:21 
Titel: ADO LoadFromFile
Habe mich in der Zwischenzeit mit einem anderen Problem befassen müssen. Sorry..

Also die Sache ist diese :
Ich habe gar nichts besonderes. Access-Datenbank mit ca. 20 Tabellen (mdb), SaveToFile geht richtig, xml-File ist korrekt, LoadFromFile ebenfalls, Daten sind wieder im ADODataSet, Zum Laden habe ich die Verbindung getrennt und nach dem Laden das DATASet wieder mit der Datenbank verbunden. Aber die Daten bringe ich vermutlich deshalb nicht in die zugehörige Tabelle, weil ich gar keine Datensätze geändert habe.

Was ich eigentlich machen wollte :
Eine Datensicherung in der Weise, dass ich eine (oder 2-3) wichtige Tabellen in eine xml-Datei sichere, damit im Falle einer Beschädigung der Tabelle die Daten vom xml-File wieder in eine leere (Ersatz-)Tabelle laden kann.
Getestet habe ich es so : Ich habe nach dem Save die Tabelle mit Microschrotts Access geleert und dann versucht, die Daten der xml-Datei mit LoadFromFile in diese leere Tabelle zu schreiben. Das ist mir nicht gelungen. Ich lese nun das xml-File in ein ungebundenes DataSet und muss dann jeden Datensatz einzeln in eine Recordvariable lesen und dann diese in das mit der DB verbundene Dataset zurückschreiben. So geht es. Ist aber Wahnsinn, weil ich nicht einfach eine beliebige Tabelle so sichern kann, die Struktur muss in der Recordvariablen enthalten sein.... usw.

Warum wollte ich das denn?
Ich sichere meine Daten über eine Internetverbindung auf einem Server (nur Speicherplatz, sonst nix). Da 2 Tabellen wöchentlich oder noch häufiger neue Daten erhalten, muss ich diese Sicherung sehr häufig durchführen. Die ganze Datenbank hat aber so 15-20 MB, und beim Aufwärtsladen kann ich nur mit 350 kBit/s senden. Und ich will nicht so viele MB über das Netz jagen, wenn ich nur 2-3 kB geändert habe. Die xml-Datei hat "nur" bescheidene 700 kB. Immerhin etwas kleiner als die ganze DB, die sehr viele fast stationäre Daten enthält.

Also besten Dank für die Hilfe, im Moment mache ich die die Sache mit dem Umschreiben über eine Record-Variable, die aber für jede Tabelle separat erstellt werden muss.

Vielleicht mache ich etwas Blödsinniges - wenn jemand weiss, wie man nur die geänderten Daten (nicht die ganze DB) sichern und im Katastrophenfall wieder zurückschreiben kann, bin ich sehr interessiert.

Pfingsten naht mit Brausen... seid gegrüsst
roebi