2010-12-06 24 views
7

J'ai des tables Paradox 5.x auxquelles je dois me connecter pour pouvoir sélectionner et mettre à jour. J'utilise OLEDBConnection. En sélectionnant parmi les tables, je n'ai aucun problème. en essayant d'insérer dans les tables j'ai rencontré un problème lorsque j'ai entré hardcoded les champs namesi a une erreur: L'instruction INSERT INTO contient le nom de champ inconnu suivant: ... alors j'ai utilisé OleDbDataReader.GetName (...) pour obtenir les noms des champs. maintenant j'utilise les noms de champs provenant de la table afin d'insérer dans la table et j'ai toujours la même erreur.Problème avec Insérer une requête dans la table Paradox en utilisant C#

Je pense que le problème est avec le nom du champ: 'Camion n ° 1 Numéro de série' Nom de la table: ".., [] Et [ » 'Véhicules'

J'ai essayé d'utiliser []," "]. J'ai lu sur le besoin de moteur Borland mais je ne suis pas sûr que ce soit le problème. Merci d'avance.

- = Noam = -

p.s Je ne peux pas changer le nom des tables depuis son castumer un DB i besoin de se connecter.

Im ajoutant le code C# i utilise:

private static string createInsertQueryVehicle(string i_VehicleNumber, string i_VehicleMFG, string i_Truck1SerialNo, string i_Truck2SerialNo, string i_Truck3SerialNo) 
     { 
      string tryout = string.Format("INSERT INTO {0} ([{6}], [{7}], [{8}], [{9}], [{10}]) VALUES(RIGHT('{1}',10),'{2}','{3}','{4}','{5}')", 
       TableName, Vnum, Vinfo, T1Serial, T2Serial, T3Serial, VnumFieldName, VinfoFieldName, T1SerialFieldName 
       T2SerialFieldName,T3SerialFieldName); 
      return tryout; 
     } 

à la fin tryout détient:

INSERT INTO Vehicles ([Vehicle Number], [Vehicle Mfg], [Truck #1 Serial Number], [Truck #2 Serial Number], [Truck #3 Serial Number]) VALUES(RIGHT('000000010001525',10),'קרונות משא','ר40011_1','ר40011_2','') 

EDIT: Je voulais juste ajouter ma solution à la fin: A la fin la meilleure solution Je pourrais obtenir était d'utiliser les accès comme point de connexion en utilisant tablse lié aux tables de paradoxe, à la fin de la gérer comme un acceses DB ..... Espérons que cela aide quelqu'un.

+1

Cela peut être ce que vous recherchez: http://stackoverflow.com/questions/116163/ delphi-paradox-db-champ-nom-question-espaces-dans-nom-champ – Kell

+0

Pouvez-vous publier le code source? – Gabe

+0

Kell: Je ne sais pas si cela s'applique aussi pour les requêtes d'insertion. J'ai vu ce message et essayé cette version malheureusement, j'ai toujours la même exception. – Bjorkson

Répondre

0

Vous devez utiliser les identificateurs entre guillemets tout en ayant des caractères spéciaux dans les noms de champs ou de tables. Le guillemet double (") devrait être ce que vous cherchez. En outre, je crois que le moteur de base de données Borland est nécessaire pour travailler sur une base de données Borland telle que Paradox. Au moins, ce qu'on m'a toujours dit, même si je n'ai jamais encore expérimenté une telle architecture, puisque j'utilisais Delphi quand je travaillais avec Paradox.

+1

Le BDE n'est pas requis pour les tables Paradox. – Donnie

+0

Merci pour l'information, Donnie! J'en tiendrai compte lors de mes prochaines exigences lorsque je travaillerai à nouveau avec une base de données Borland. –

+0

Ce n'est pas le cas je suppose. Je l'ai essayé tous les jours. – Bjorkson

0

Comme vous avez trouvé une solution (un peu alambiquée) ... Cela peut valoir la peine de placer une trace ODBC et de voir comment Access transmet le nom du champ à l'origine du problème. Il peut s'agir simplement d'une séquence d'échappement que le paradoxe accepte pour le hachage (#) ou quelque chose de similaire. Juste une pensée.

0

J'ai été capable de reproduire le problème en créant une table (Table1) avec une colonne qui a un signe de numéro (col #). Comme:

INSERT INTO `Table1.db` (`col#`) VALUES ('a') 

Où je lance ce SQL je reçois cette erreur:

The INSERT INTO statement contains the following unknown field name: 'col#'. Make sure you have typed the name correctly, and try the operation again. 

Cela semble être un bug fournisseur Microsoft JET.La seule solution est trouvée est d'insérer la valeur dans une autre colonne comme

INSERT INTO `Table1.db` (`col1`) VALUES ('a') 

Et puis mettre à jour la colonne col de #:

UPDATE `Table1.db` SET `col#` = col1 

J'ai trouvé d'autres problèmes avec le fournisseur JET. Par exemple, vous obtiendrez cette mauvaise erreur si la table est ne dispose pas d'une clé primaire ou mot de passe protégé:

Operation must use an updateable query.