Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Acces DB öffnen --> Fehler (https://www.delphipraxis.net/60492-acces-db-oeffnen-fehler.html)

Christian18 7. Jan 2006 17:04

Datenbank: Access • Version: 2000 • Zugriff über: ADO

Acces DB öffnen --> Fehler
 
Hallo,

ich habe mal wieder ein kleines Problem mir Delphi und Access. Wenn ich meine ADOTable auf meinem DatenModul Öffnen will, dann kommt immer eine Fehlermeldung.

[Fehler]
Im Projekt Project1.exe ist eine Exception der Klasse EVariantTypeCastError aufgetreten. Meldung: 'Variante des Typs (Null) konnte nicht in Typ (String) konvertiert werden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
[/Fehler]

Wichtig ist vieleicht für euch noch das ich über die ODBC Schnittstelle auf die Datenbank zugreife.

Hier meine Datenbank:
SQL-Code:
Create Table Auto
(
  Idx Counter,
  Name Char(30),
  Vorane Char(30),

  Constraint pk Primary Key (Idx)
)
Ich öffne die Datenbank mit ADOTable1.Active:=True;

Vieleicht könnt ihr mir weiterhelfen.

Mit freundlichen Grüßen

Christian18

mikhal 7. Jan 2006 17:12

Re: Acces DB öffnen --> Fehler
 
Bist du da nicht schon einmal drauf reingefallen? Ändere die Definition deiner Tabelle wie folgt:

SQL-Code:
Create Table Auto

  Idx Counter,
  Name Char(30) null,
  Vorane Char(30) null,

  Constraint pk_Auto Primary Key (Idx)
)
Auf diese Art und Weise läßt du NULL-Werte in den Spalten Name und Vorname (?) zu. Achte bitte auch darauf, dass "NAME" eventuell als Schlüsselwort interpretiert werden könnte...

Grüße
Mikhal

marabu 7. Jan 2006 18:33

Re: Acces DB öffnen --> Fehler
 
Der angegebene Fehler zum angegebenen Zeitpunkt (beim Öffnen einer Tabelle) scheint mir nicht unbedingt auf die Null-Klausel im zu Grunde liegenden DDL-Statement hinzuweisen. Ich erwarte eigentlich, dass in einem der event handler, die beim Öffnen der Tabelle getriggert werden, eine Konvertierung der Form
Delphi-Quellcode:
Edit.Text := Tabelle.FieldValues['Name'];
statt findet. Und ich vermute, dass die Null-Klauseln, wie in jenem anderen thread empfohlen wurde, bereits über den Entwurfsmodus von Access hinzugefügt wurden und nur das hier gezeigte DDL-Statement noch das alte ist (Copy & Paste).

Grüße vom marabu

alzaimar 7. Jan 2006 21:28

Re: Acces DB öffnen --> Fehler
 
Ich tippe auch mal darauf, das sich in einer der Eventhandler die vom marabu beschriebene laisser-faire Programmierung eingeschlichen hat.

Mit Variants zu arbeiten, ist, insbesondere bei Metadaten, ungemein praktisch. Aber man muss, wenn man die Variant-Welt verlässt, unbedingt Konvertierungsroutinen verwenden. Ich habe mir dafür eine ganze Reihe von Funktionen geschrieben, die Delphi nicht oder nur ungenügend implementiert hat:
Delphi-Quellcode:
Function VarToInt (aVariant : TVariant) : Integer;
Function VarToStr (aVariant : TVariant) : String;
Function VarToBool (aVariant : TVariant) : Boolean;
Function VarToDateTime (aVariant : TVariant) : DateTime;
Function VarToDouble (aVariant : TVariant) : Double;
...

Christian18 10. Jan 2006 13:41

Re: Acces DB öffnen --> Fehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich weiß das ich dieses Thema schon einmal angesprochen habe. Aber bei dem letzten mal hat es irgendwie dann doch nicht funktionert. Also der Fehler kommt immer wenn ich das Programm Compiliere, wenn ich das Compilierte Programm ausführe, dann funktionert es. ich mache in dem Proramm noch nichts weiter als eine Tabelle zu öffnen die ich vorher über Access befehle erzeuge.

So erzeuge ich die Tabelle:

SQL-Code:
Create Table Kunden
(
  Idx Counter,
  Name Char(30) Null,
  Vorname Char(30) Null,
  Str Char(50) Null,
  PLZ Char(5) Null,
  Ort Char(50) Null,

  Constraint pk Primary Key (Idx)
)
so mehr mache ich noch nicht. Ich schicke auch mal das Projekt mir, was ich bis jetzt habe. Dann könnt ihr euch mal den Fehler anschauen.

MFG Christian18

PS: Bitte nicht vergessen die ODBC Schnittstelle einzurichten. Name der Verbindung ist test.

shmia 10. Jan 2006 14:57

Re: Acces DB öffnen --> Fehler
 
Zitat:

Zitat von Christian18
Wichtig ist vieleicht für euch noch das ich über die ODBC Schnittstelle auf die Datenbank zugreife.

Warum das denn ??
Nimm doch den OLE-DB Provider für die Jet-Engine. Das beschleunigt den Datenzugriff.
Folgender Code zeigt, wie der connectionstring "gebaut" wird:
Delphi-Quellcode:
const
//   DB_PROVIDER = 'Microsoft.Jet.OLEDB.3.51'; // Access 97
   DB_PROVIDER = 'Microsoft.Jet.OLEDB.4.0'; // Access 2000
function MDBGetConnectionString(const MDBFile: string): string;
begin
   Result := Format('Provider=%s;Data Source=%s',[DB_PROVIDER,MDBFile]);
end;

Christian18 10. Jan 2006 15:05

Re: Acces DB öffnen --> Fehler
 
Hi shmia,

danke für den code ich werde das mal ausprobieren. wichtiger für ich ist jetzt aber erstmal die fehlermeldung wegzubekommen, wenn ich das programm compiliere.

MFG Christian18

shmia 10. Jan 2006 15:49

Re: Acces DB öffnen --> Fehler
 
Zitat:

Zitat von Christian18
wichtiger für ich ist jetzt aber erstmal die fehlermeldung wegzubekommen, wenn ich das programm compiliere.

Umso wichtiger ist es, die Datenbank "richtig" zu öffnen.
Wenn du über ODBC-Treiber arbeitest, dann hast du eine weitere Schicht zwischen deiner Anwendung und der Datenbank.
In dieser Schicht gehen bestimmte Funktionalitäten verloren (da sie in ODBC nie vorgesehen waren); Bugs in dieser Schicht können bei bestimmten Konstellationen zum Vorschein kommen.

Wichtig ist ausserdem:
* MDAC Version 2.7 SP 1 oder höher verwenden
* Jet Engine Servicepack 8
download: http://msdn.microsoft.com/data/mdac/...s/default.aspx


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 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