AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Datenmodul-Funktionen Delphi XE vs. Delphi 10

Datenmodul-Funktionen Delphi XE vs. Delphi 10

Ein Thema von Gerkey · begonnen am 21. Dez 2016 · letzter Beitrag vom 22. Dez 2016
Antwort Antwort
Seite 1 von 2  1 2   
Gerkey

Registriert seit: 18. Okt 2016
Ort: Bad Kreuznach
52 Beiträge
 
Delphi XE Professional
 
#1

Datenmodul-Funktionen Delphi XE vs. Delphi 10

  Alt 21. Dez 2016, 10:18
Datenbank: MSACCESS • Version: Office365 • Zugriff über: MS Jet 4.0 OLE DB
Möchte 32-Bit - Anwendungen von Delphi XE auf 64-Bit - Anwendungen in Delphi 10 umsetzen.
Bei der Speicherung von MSACCESS - Daten, die im XE - Datenmodul einwandfrei funktioniert, kommt an der selben Stelle in 64 - Bit / Delphi 10 die Fehlermeldung "Operation muss eine aktualisierbare Abfrage verwenden !".
Kann mir (Delphi Autodidakt) jemand bei der Lösung des Problems helfen ?

Gerkey
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Datenmodul-Funktionen Delphi XE vs. Delphi 10

  Alt 21. Dez 2016, 10:19
Ohne weitere Details wird das schwierig werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.249 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Datenmodul-Funktionen Delphi XE vs. Delphi 10

  Alt 21. Dez 2016, 10:52
Funktioniert denn die 32-Bit-Version mit Delphi 10 kompiliert noch?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Datenmodul-Funktionen Delphi XE vs. Delphi 10

  Alt 21. Dez 2016, 15:21
Das Problem dürfte weniger am Datenmodul selbst liegen, sondern eher an den genutzten Datenbankkomponenten.

Bei dem Zugriff auf Access (und auch andere Datenbanken) kommt diese Fehlermeldung eher dann, wenn die Daten eine Abfrage aktuallisiert werden sollen, die Abfrage aber nicht über einen eindeutigen Schlüssel verfügt oder Daten in mehreren Tabellen aktuallisiert werden müssten.

Prüf' bitte mal, ob die Eigenschaften der Datenzugriffskomponenten in beiden Delphiversionen inhaltlich übereinstimmen.

Beschreib' bitte mal etwas genauer, wie Du auf die Datenbank zugreifst, also welche Komponenten ... Wird für den Zugriff ein SQL-Statement genutzt? Wenn ja, stell' das bitte hier mal ein.
  Mit Zitat antworten Zitat
Gerkey

Registriert seit: 18. Okt 2016
Ort: Bad Kreuznach
52 Beiträge
 
Delphi XE Professional
 
#5

AW: Datenmodul-Funktionen Delphi XE vs. Delphi 10

  Alt 21. Dez 2016, 19:48
Erst einmal mein Dank für die mehrfachen Kommentare !
Nachstehend ein Auszug aus dem Datenmodul:

uses
SysUtils, Classes, Dialogs, Messages, DB, ADODB;

procedure Tdm.DataModuleCreate(Sender: TObject);
begin
dm.Hd.ConnectionString := Format('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Persist Security Info=False',['c:\JrBrHd.mdb']);
dm.Hd.DisableControls;

Procedure ZEITINTERVALLE_SPEICHERN;

if FINDE_HAND_MIT_HANDNR( 'G001' ) then
begin
….
dm.Hd.Edit;
dm.Hd['Info1'] := strIntv;
dm.Hd.Post;
end;

Das Datenmodul ist in beiden Fällen bis auf die Zeile mit dem ConnectionString (nur in der 64-Bit Version / Delphi 10 enthalten ) identisch.
Hilft das weiter ?

Zur Frage, ob die 32-Bit Version unter Delphi 10 läuft: ja, das tut sie, wenn ich die Zeile mit dem ConnectionString lösche !

Gerkey
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Datenmodul-Funktionen Delphi XE vs. Delphi 10

  Alt 21. Dez 2016, 20:33
Zeig' uns bitte mal von dm.Hd den Teil aus der DMF. Eventuell kann man an den dort gesetzten Attributen was erkennen oder zumindest erahnen.

Der Fehler tritt wohl hier auf: dm.Hd.Post

Wie kommt denn die Datenbankverbindung zustande, wenn Du die Zeile mit dem ConnectionString löschst?
Da muss es doch dann noch irgendwo eine Stelle geben, die die Datenbankverbindung herstellen kann.

Was genau ist HD? TADOIrgendwas?
Gibt es dort ein SQL?
Wie wird da die Verbindung zur Datenmenge hergestellt?

Was macht den FINDE_HAND_MIT_HANDNR('G001')? Dürfen wir was über das Innenleben erfahren? Da wird ja wohl die zu editierende Datenmenge ausgewählt. Und die scheint ja nicht änderbar zu sein.
  Mit Zitat antworten Zitat
Slipstream
(Gast)

n/a Beiträge
 
#7

AW: Datenmodul-Funktionen Delphi XE vs. Delphi 10

  Alt 21. Dez 2016, 21:55
Erst einmal mein Dank für die mehrfachen Kommentare !
Delphi-Quellcode:
procedure Tdm.DataModuleCreate(Sender: TObject);
begin
  dm.Hd.ConnectionString := Format('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Persist Security Info=False',['c:\JrBrHd.mdb']);
  dm.Hd.DisableControls;
Hd ist bestimmt ein Data.Win.ADODB.TADODataSet, oder? Bei TAdoconnection gibts einen ConnectionString, aber kein DisableControls.
Wenn du dem Dataset einen Connectionstring zuweist, ist das Dataset dann automatisch mit der richtigen Tabelle verbunden? Ich fürchte nein.
Wenn du sofort nach dem Zuweisen des Connectionstring DisableControls aufrufst, ist das Dataset bzw. seine Komponenten deaktiviert und die Tabelle noch immer nicht mit dem Dataset verbunden.

Hast du es schonmal mit TADODataSet.Open versucht? Das soll laut Online-Hilfe die Datenmenge aktivieren. Danach sollte man mit der Tabelle ganz normal arbeiten können. Wenn man damit fertig ist, kann man die Tabelle oder die Datenmenge mit TADODataSet.Close wieder schliessen.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Datenmodul-Funktionen Delphi XE vs. Delphi 10

  Alt 21. Dez 2016, 23:55
Hd ist bestimmt ein Data.Win.ADODB.TADODataSet, oder? Bei TAdoconnection gibts einen ConnectionString, aber kein DisableControls.
Wenn du dem Dataset einen Connectionstring zuweist, ist das Dataset dann automatisch mit der richtigen Tabelle verbunden? Ich fürchte nein.
Wenn du sofort nach dem Zuweisen des Connectionstring DisableControls aufrufst, ist das Dataset bzw. seine Komponenten deaktiviert und die Tabelle noch immer nicht mit dem Dataset verbunden.

Hast du es schonmal mit TADODataSet.Open versucht? Das soll laut Online-Hilfe die Datenmenge aktivieren. Danach sollte man mit der Tabelle ganz normal arbeiten können. Wenn man damit fertig ist, kann man die Tabelle oder die Datenmenge mit TADODataSet.Close wieder schliessen.
Warum spekulieren?
Der vollständige Source-Code hilft hier weiter.

Zur Frage, ob die 32-Bit Version unter Delphi 10 läuft: ja, das tut sie, wenn ich die Zeile mit dem ConnectionString lösche !
Alleine diese Aussage zeigt, daß hier einiges im Argen liegt.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Gerkey

Registriert seit: 18. Okt 2016
Ort: Bad Kreuznach
52 Beiträge
 
Delphi XE Professional
 
#9

AW: Datenmodul-Funktionen Delphi XE vs. Delphi 10

  Alt 22. Dez 2016, 10:41
Datenmodul:
uses
SysUtils, Classes, Dialogs, Messages, DB, ADODB;
type
Tdm = class(TDataModule)
ADOConnection1: TADOConnection;
Hd: TADOTable;

{ ________________________ procedure Tdm.DataModuleCreate _____________________}
procedure Tdm.DataModuleCreate(Sender: TObject);
begin
dm.Hd.ConnectionString := Format('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Persist Security Info=False',['c:\JrBrHd.mdb']);
{ dm.Hd.DisableControls; }
end;

Function FINDE_HAND_MIT_HANDNR( HdNr : String ) : boolean;
begin
if not dm.Hd.Active then dm.Hd.Open;
result := False;
if dm.Hd.Locate('HdNr',(HdNr),[loPartialKey]) then
result := True;
end;

Procedure ZEITINTERVALLE_SPEICHERN;
var sWert, strIntv : String;
begin
if FINDE_HAND_MIT_HANDNR( 'G001' ) then
begin

dm.Hd.Edit;
dm.Hd['Info1'] := strIntv;
dm.Hd.Post;
end;
end;

Die Tabelle ist also nach Ausführung von FINDE_HAND_MIT_HANDNR geöffnet. Das Problem entsteht mit der Ausführung von dm.Hd.Post !
Auch bei gelöschtem Statement dm.Hd.DisableControls kommt die Fehlermeldung.
Und in der Delphi 10 / 32-Bit Version funktioniert es (ohne ConnectionString).

Gerkey
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

AW: Datenmodul-Funktionen Delphi XE vs. Delphi 10

  Alt 22. Dez 2016, 13:10
Nein, das was Du schreibst, kann so nicht sein.

Du hast 'ne TADOConnection, die baut 'ne Datenbankverbindung auf.

Zusätzlich weist Du aber der TADOTable auch 'nen ConnectionString zu. Entweder oder, aber bitte nicht beides.

Nimmst Du den String bei der TADOTable weg, wird die Verbindung der TADOConnection genutzt, sie scheinen sich wohl zu unterscheiden.

dm.Hd.DisableControls hat damit nix zu tun, das sagt nur, dass datensensitive Komponenten nicht aktuallisiert werden sollen. Ist also was für die Optik, aber nicht für den Datenbankzugriff.

Überprüfe doch mal bitte sämtliche Einstellungen der TADOConnection in allen Programmversionen, ob die auch wirklich zu 100% übereinstimmen.

Die Fehlermeldung besagt, dass die Änderungen nicht geschrieben werden dürfen, weil die Datenmenge nicht beschreibbar ist.

Also schau bitte mal nach, ob bei allen Versionen das Schreiben über die TADOConnection überhaupt zulässig ist.

Der von Dir gepostete ConnectionString lässt nicht erkennen, dass das Schreiben erlaubt sein könnte.

Beispiel für Windows-XP mit Delphi 7 und Zugriff auf 'ne Access-Datenbank:
Format('Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=%s;Mode=ReadWrite|Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False',['c:\JrBrHd.mdb']);
Bei Deiner Version fehlen alle Angaben zu Mode=. Hier sollten aber die Zugriffsrechte stehen.

Unter Windows-XP ist als Vorgabe der Zugriff auf ACCESS ReadOnly. Wie das bei anderen Betriebssystemen ist, mag ich jetzt nicht ermitteln. Prüfe das bitte selbst, durch den Aufbau einer neuen Datenbankverbindung aus der Entwicklungsumgebung heraus.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:56 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