2010-12-06 19 views
7

Tengo tablas de Paradox 5.x a las que necesito conectarme para seleccionar y actualizar. Estoy usando OLEDBConnection.Problema con Insertar consulta en la tabla Paradox usando C#

seleccionando de las tablas no tengo ningún problema. al intentar insertar en las tablas me encontré con un problema cuando ingresé codificado los nombres de los camposi obtuve un error: La instrucción INSERT INTO contiene el siguiente nombre de campo desconocido: ... así que utilicé OleDbDataReader.GetName (...) para obtener los nombres de los campos. ahora uso los nombres de campos recibidos de la tabla para insertarlos en la tabla y sigo recibiendo el mismo error.

Creo que el problema es con el nombre del campo: 'Truck n ° 1 Número de serie' nombre Tabla: ".., [] Y [" 'Vehículos'

He intentado utilizar []" "].

He leído sobre la necesidad del motor Borland pero no estoy seguro de que este sea el problema. Gracias por adelantado.

- Noam = = -

p.s no puede cambiar el nombre de las tablas ya que es un DB castumer i necesidad de conectarse.

Im añadiendo el código C# yo uso:

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; 
     } 

en la puesta a punto final se tiene:

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: sólo quería añadir mi solución al final: Al final la mejor solución podría llegar a utilizar accesos como el punto de conexión usando tablse vinculado a las tablas de paradojas, al final manejarlo como un DB accesos ..... Espero que ayude a alguien.

+1

Esto puede ser lo que está buscando: http://stackoverflow.com/questions/116163/ delphi-paradox-db-field-name-issue-spaces-in-field-name – Kell

+0

¿Se puede publicar el código fuente? – Gabe

+0

Kell: No sé si se aplica también para las consultas de inserción. He visto esta publicación y probé esta versión desafortunadamente. Aún recibo la misma excepción. – Bjorkson

Respuesta

0

Necesita utilizar los identificadores entre comillas mientras tiene carácter especial en los nombres de campo o tabla. La comilla doble (") debería ser lo que estás buscando.

Además, creo que se necesita el motor de base de datos de Borland para trabajar contra una base de datos Borland como Paradox. Al menos, eso es lo que siempre me han dicho, aunque nunca había experimentado tal arquitectura, ya que estaba usando Delphi cuando trabajaba con Paradox.

+1

El BDE no es obligatorio para las tablas de paradojas. – Donnie

+0

¡Gracias por la información, Donnie! Lo tendré en cuenta en mis próximos requisitos cuando vuelva a trabajar con una base de datos Borland. –

+0

No es el caso, supongo. Lo intenté allreday. – Bjorkson

0

Como su solución original (algo intrincada) ... Puede valer la pena colocar un rastro ODBC y ver cómo Access está pasando el nombre del campo que está causando el problema. Puede ser simplemente una secuencia de escape que la paradoja acepta para el hash (#) o algo similar. Solo un pensamiento.

0

Pude reproducir el problema creando una tabla (Tabla 1) con una columna que tiene un signo de número (col #). Al igual que:

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

Cuando corro este SQL consigo este error:

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

Esto parece ser un proveedor de Microsoft Jet error.La única solución que se encuentra es para insertar el valor en la otra columna como

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

y luego actualizar la columna de la col #:

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

he encontrado otros problemas con el proveedor de JET. Por ejemplo, obtendrá este error erróneo si la tabla no tiene una clave principal o contraseña protegida:

Operation must use an updateable query. 
Cuestiones relacionadas