Autor Beitrag
Klaus Müller
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
BeitragVerfasst: Do 28.03.19 17:30 
Hallo Leute,

Ich habe ein seltsames Problem mit einem alten Proramm von mir.
Das Proramm wirde unter Windows XP erzeugt und läuft dort auch ohne Fehler unter Windows 7 geht es auch nur bei windows 10 git es Fehler.
Es geht um eine Suchfunktion in einer Adress Datenbank, dei Datenbank ist eine Access DB (2010).
Ein einem Feld werden verschidene Felder miteinander Verknüpft.
Vorname & Nachname & Email & Ort.
Auf diesem Feld ist ein Parameter der in dem Erzeugten String nach einem Teilsting sucht.
Unter XP und w7 funktionirt das auch.
Unter w10 kommt jetzt immer die Fehlermeldung: Unterschidliche Typen für das Feld, Erwarte: WideMemo gefunden: WideString??
Wiso geht das bei w10 nicht mehr?
Hat hier einer eine Idee?


Moderiert von user profile iconTh69: Topic aus Datenbanken (inkl. ADO.NET) verschoben am Do 28.03.2019 um 17:45
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4051
Erhaltene Danke: 839

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Do 28.03.19 17:38 
Ist das denn ein .NET-Programm oder doch ein Delphi-Programm (dann würde ich das Thema verschieben)?
Klaus Müller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
BeitragVerfasst: Do 28.03.19 17:45 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Ist das denn ein .NET-Programm oder doch ein Delphi-Programm (dann würde ich das Thema verschieben)?

Es ist ein Delphi Programm.

Moderiert von user profile iconTh69: Beiträge zusammengefasst

Ist das hier in der falschen Rubrik?
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 28.03.19 21:02 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Klaus Müller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
BeitragVerfasst: Fr 29.03.19 14:03 
Hallo Frühlingsrolle,
Erst mal danke dass du das gelesen hast und geantwortet hast.
Ich habe das Problem inzwischen aber gelöst.
Es geht ja um die Zuweisungen der Datentypen bei Datenfelden.
Ich habe da länger rum probiert und keine vernünftigen Ergebnisse bekommen.
Wieso das Unter XP,W7 geht und unter w10 leider immer noch nicht.
Noch seltsamer ist, ich habe jetzt in der Feldübersicht der Query Komponente alle Felder gelöscht, so das eine Zuweisung gar nicht mehr möglich ist und jetzt ist der Fehler auch weg.
Vielleicht hat ja jemand eine Erklärung dafür?
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1185
Erhaltene Danke: 98

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: So 31.03.19 13:35 
Kenne ich. Kam öfter mal vor. Wenn eine Query oder Tabelle importierte Feldnamen hat und sich an der physikalischen Tabelle was geändert hat.
In deinem Fall liegt es an der MS-Komponente zum Zugriff auf die DB. Die liegt sicher unter Win10 in einer aktualisierten Version vor, die andere Datentypen liefert als die älteren Versionen.
Beim übernehmen der Daten in dein Programm wird versucht die Datentypen den Delphi eigenen zuzuordnen was dann fehlschlägt.

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
Klaus Müller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
BeitragVerfasst: So 31.03.19 14:38 
Hallo Sinspin,

Vermute ich auch, habe auch unter w10 das neuste Access installiert, da hat sich in der Datenbank Schnittstelle etwas geändert.
Blöd ist nur in dem Programm kann ich das umgeh da die Tabellen Definitionen im Programm nicht gebraucht werden.
Es gibt aber auch Abfragen wo man die Definitionen braucht, was ist dann eigentlich?
So nach dem Motto blöd gelaufen das Programm funktioniert unter w10 hat nicht mehr richtig?
Das kann’s ja auch nicht sein.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1185
Erhaltene Danke: 98

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: Mo 01.04.19 08:57 
Eigentlich bekommt man doch jede Abfrage als SQL Script hin.
Parameter könnte man Casten oder gleich fertig ins Script packen.
In den gelieferten Daten könnte man es auch mit Casten auf einen anderen Typ probieren. Oder du leitest dir die Query/Dataset Komponente selber ab und schreibst den Feldgenerator selber. Geliefert werden sollten alle Felder als typisierte Varianten. Und da sollte es von M$ irgendwo eine Definition geben um die Umsetzung auf Delphi zu ermöglichen.

Was für eine Delphi Version verwendest du und was für DB Komponenten?

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
Klaus Müller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
BeitragVerfasst: Mo 01.04.19 18:03 
Hallo Sinspin,

Hey jetzt geht’s aber ab, nein ich nein nicht die SQL Definition.
Ab erst mal der Reihe nach, ich verwende Delphi XP.
Mit den Komponenten TADOConnection, ADOQuery
Die Datenbank Access 2010 wird zur Laufzeit mit TADOConnection
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;
Jet OLEDB:Database Password=MyDbPassword;
Verbunden.
Die Abfrage läuft dann über die ADOQuery Komponente, in der ADOQuery Komponente steht dann der SQL Text.
Genau um dies Komponente geht es auch, hier kann man auch Datenfelder hinzufügen und die Datentypen definieren, das wird aber unter w 10 leider anders interpretiert. Hier kommt es immer zu einem Fehler wenn man im SQL eine String zusammensetzt.
Zum Beispiel Feld Name = Vorname und Nachname
Und jetzt einen Parameter definiert und in dem dann einen Namen sucht, gibt es eine Fehlermeldung das der Typ nicht mehr stimmt. Unter w7 und XP geht das aber ohne Problem.
Warum da W10 so reagiert kann ich mir momentan nicht erklären.
Wenn ich nun aber die Datenfelder in der ADOQuery alle lösche dann gibt es keinen Fehler mehr.
Seltsam ist auch das es eine Fehlermeldung gibt die aber nicht von dem Delphi Programm kommen kann da hier nichts definiert ist, die kommt aus der Datenbank Schnittstelle.

Gruß
Klaus M
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1185
Erhaltene Danke: 98

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: Di 02.04.19 10:43 
Hallo Klaus,

freut mich das es jetzt geht.
Aber wenn der Fehler nicht aus Delphi kommt ist es vieleicht sinnvoll nochmal tiefer zu suchen.

Was ich meinte war eher sowas:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// cast von feld und parameter auf gleich typ
query.SQL.Text := 
    'SELECT * FROM Contacts'+
    ' WHERE Cast(FirstName+LastName AS nvarchar(100)) = Cast(:FName AS nvarchar(100));';

// arbeit ohne parameter aber auch cast
query.SQL.Text := 
    'SELECT * FROM Contacts'+
    ' WHERE Cast(FirstName+LastName AS nvarchar(100)) = Cast('+QuotedString('SucheName')+' AS nvarchar(100));';

Den Typ zum Casten musst Du dir noch den passenden dann suchen. Aber so würde es für SQL Server aussehen.

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
Klaus Müller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
BeitragVerfasst: Do 04.04.19 16:06 
Hallo Sinspin

Danke zu dem Beispiel mit den „Casten“, das ist interessant. Muss ich irgendwann mal probieren.

Gruß
Klaus M.