Pregunta

Estoy tratando de llenar un TDBGrid con los resultados de los siguientes TQuery contra el archivo de Diario.db:

select * from Journal
where  Journal.where = "RainPump"

He intentado tanto Journal."Where" y Journal.[Where] fue en vano.

También he intentado: select Journal.[Where] as "Location" con el mismo resultado.

Diario.db es un archivo creado por un tercero y no puedo cambiar los nombres de campo.

El problema es que el campo que me interesa es la llamada 'dónde' y es comprensible que causa el error anterior.¿Cómo hago referencia a este campo sin causar el BDE (presumiblemente) a punto de estallar?

¿Fue útil?

Solución

Puede insertar el conjunto de resultados en una tabla nueva con los "valores" (sin especificar nombres de columna) en la que han dado sus propios nombres de las columnas de la nueva tabla y, a continuación, hacer un select de la tabla, el Uso de un TQuery, algo como:

Query1.sql.clear;
query1,sql.add('Insert into newtable values (select * from Journal);');
query1.sql.add('Select * from newtable where newcolumn = "Rainpump";');
query1.open;

Otros consejos

Aah, yo soy amante de delphi de nuevo...He encontrado una solución.El componente TQuery tiene la propiedad de Filtro :-)
He omitido el "Where=" cláusula where de la consulta pero manteniendo todos los otros 'y' condiciones.
Me puse el Filtro de propiedad "Donde = 'RainPump'".
Debo configurar el Filtrado de la propiedad en True y la vida es buena de nuevo.

Todavía me pregunto si hay una manera más inteligente de hacerlo utilizando esta tecnología antigua, pero si es estúpido y funciona, entonces no es estúpido.

Me temo que alguien que lea este hilo va a tener la impresión de que el BDE motor de SQL no puede manejar la consulta:

select * from Journal where Journal."Where" = "RainPump"

y será un desperdicio de su tiempo innecesariamente circumlocuting a su alrededor.

De hecho, esta construcción funciona bien.Las comillas alrededor de "Donde" se mantiene el BDE de interpretarla como una palabra clave, tal como era de esperar.

No sé lo que está mal en Baldric de la situación particular, o lo intentó en qué orden.Él describe el problema como la consulta de un *.db tabla, pero su error de SQL se parece más a algo que te gustaría conseguir en modo passthrough.O, posiblemente simplificado su código para la presentación, lo que elimina la verdadera causa del error.

Mis pruebas realizadas con:BDE v. 5.2 (5.2.0.2) Paradoja para Windows v.7 (32b) Delphi 5.0 (5.62)

Varias versiones de la afirmación de que tener éxito:

select * from Journal D0 where D0."Where" = "RainPump"
select * from Journal where Journal."Where" = "RainPump"
select * from ":common:Journal" D0 where D0."Where" = "RainPump"
select * from ":common:Journal" where ":common:Journal"."Where" = "RainPump"
select * from :common:Journal where Journal."Where" = "RainPump"
select * from ":common:Journal" D0 where D0."GUMPIK" = 3
select * from ":common:Journal" where ":common:Journal"."GUMPIK" = 3
select * from :common:Journal where Journal."GUMPIK" = 3

Las versiones de la declaración de que es correcta pero no con "no es Válido el uso de la palabra clave":

select * from ":common:Journal" where :common:Journal."Where" = "RainPump"
select * from :common:Journal where :common:Journal."Where" = "RainPump"
select * from ":common:Journal" where :common:Journal."GUMPIK" = 3
select * from :common:Journal where :common:Journal."GUMPIK" = 3

-Al.

Reescribir como este, debería funcionar:

select * from Journal where Journal.[where] = "RainPump"

A mí, me gustaría cambiar el nombre de la torpe de la columna.

En MySQL, tabla/columna de nombres puede estar entre ` (el ángulo entre comillas simples).No estoy seguro de lo que el BDE permite, pero podría intentar reemplazar [donde] con `dónde`

select * from Journal where Journal."where" = "RainPump"

Ok, así que nombrar las columnas después de teclados es malo en CUALQUIER sistema de SQL.Le nombre de una columna "seleccionar" o "contar" o "modificar" o "tabla", o tal vez sólo por diversión "truncar" o "caída"?Espero que no.

Incluso si se construye en el trabajo alrededor de este instancia va a crear un campo de minas para quien viene después.¿Qué mj2008 dijo y cambiar el nombre de la sangrienta columna.

Permitir que el nombre de la columna a persistir es el peor ejemplo de alguien que es la construcción de un sistema y te llevaría en la caca lista para cualquier gerente de proyecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top