Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-08-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
codigo sql en filtro de TIBTable

Hola,

EStoy usando D6, IB7, y necesito poner el código SQL siguiente, en un filtro de un TIBTAble.

(NUMGRUP = 'lo que hay en TbGruposNUMGRUP') AND (CAUBAJA = 1)

Tengo puesto esto, y por algún motivo que no alcanzo a comprender, me da error a partir de and

TbMatri.Filter := 'NUMGRUP= ' + TbGruposNUMGRUP.AsString + 'AND CAUBAJA = 1';

Me da un error de:
Dynamic SQL Error
SQL Error Code =-104
Token unKnown - line2, char 15
AND.

Alguien puede ayudarme??

Gracias a todos

Virginia Romero
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #2  
Antiguo 04-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
NUMGRUP es alfa o numerico? Si es alfa, le faltarian las comillas (te aconsejo utilizar QuotedStr para ese menester)

TbMatri.Filter := 'NUMGRUP= ' + QuotedStr(TbGruposNUMGRUP.AsString) + 'AND CAUBAJA = 1';

Espero te sirva

PD: Por cierto, al final has decidido utilizar TIBTables en lugar de TIBDatasets?
Responder Con Cita
  #3  
Antiguo 04-08-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Hola cadetill!

Cita:
Por cierto, al final has decidido utilizar TIBTables en lugar de TIBDatasets?
En realidad no, pero tengo que hacer que me funcione lo que tengo hasta ahora, para comenzar el cambio sin errores que me hagan no saber donde estoy fallando, pues aunque me parece la mejor opción no lo controlo aun demasiado para diferenciar los errores de código mios con los errores relaccionados con el IBDataSet

Cita:
NUMGRUP es alfa o numerico?
es numérico, ¿cambia la forma de insertar el código?

Por cierto, cuando tienes algo escrito en algún campo, como ModigySQL del IBDataSet, si quieres cambiar en código su valor, ¿cómo lo haces? se que se usa el add , por que me lo pusiste en un ejemplo, pero, ¿cómo va lo de los + para unir esos add, cuando tengo que poner en varios add un trozo de código?

Por otro lado, para asignar un código a una propiedad como filter o selectsql ¿Tienes que borrar primero lo que hay escrito?
¿si escribes código nuevo con el add sin haber borrado, ¿se añade el código a lo que ya tenía esa propiedad , o tienes que escribirlo siempre entero?

Gracias por la ayuda, como siempre

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)

Última edición por Giniromero fecha: 04-08-2003 a las 15:04:41.
Responder Con Cita
  #4  
Antiguo 04-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Hola

Bueno, lo de alfanumerico o numerico era solo para saber si necesitabas ponerlo entre comillas como te indicaba.
Bien, otro posible error (no se si sera de hacer copy-paste o si realmente lo tienes asi) es que no dejas espacio entre el valor del campo y el AND siguiente

El tema del TIBDataset

Código:
// si se utiliza ADD, primero hay que limpiar el contenido anterior
IBDataSet1.DeleteSQL.Clear;
// luego se añade lo que se quiera
IBDataSet1.DeleteSQL.Add('delete from tabla');
IBDataSet1.DeleteSQL.Add('where id = : old_id');
Tambien puedes utilizar el Text en lugar de el add debido a que es una propiedad de tipo TStrings. En este caso, no hace falta limpiar el contenido previo, pero si unir las cadenas de texto si se hace en varias lineas

Código:
IBDataSet1.DeleteSQL.Text := 'delete from tabla ' +
                  'where id = : old_id';
Pero si lo haces en una sola, no pasaria nada

Código:
IBDataSet1.DeleteSQL.Text := 'delete from tabla where id = : old_id';
Lo que pasa es que, personalmente me gusta mas verlo en varias lineas y, a parte, en una sola linea, aqui en los foros aparece el scroll horizontal (que tampoco me gusta )

Lo explicado aqui, te servira tanto para el SelectSQL, como el DeleteSQL como las demas

Bueno, espero te sirva

PD: entre los : y old he dejado un espacio para que no me saliera el smile
Responder Con Cita
  #5  
Antiguo 04-08-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

Cita:
Posteado originalmente por cadetill
PD: entre los : y old he dejado un espacio para que no me saliera el smile
a la hora de responder a un mensaje tienes, justo debajo del cuadro donde editas tu respuesta, un checkbox titulado: "Deshabilitar los smilies" ... y asunto arreglado.

Saludos
Responder Con Cita
  #6  
Antiguo 04-08-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Cita:
otro posible error (no se si sera de hacer copy-paste o si realmente lo tienes asi) es que no dejas espacio entre el valor del campo y el AND siguiente
he separado el and, pero eso no lo soluciona. Voy a intentar tirar de backup, de antes de pasar a este form de paradox a interbase, y a partir de esto, a ver si con un IBDataSet, bien definido se me soluciona el tema.

Muchas gracias por tu ayuda,

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #7  
Antiguo 04-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Posteado originalmente por kinobi
a la hora de responder a un mensaje tienes, justo debajo del cuadro donde editas tu respuesta, un checkbox titulado: "Deshabilitar los smilies" ... y asunto arreglado.
Totalmente cierto, pero no me acorde

Cita:
Posteado originalmente por kinobi
Voy a intentar tirar de backup, de antes de pasar a este form de paradox a interbase, y a partir de esto, a ver si con un IBDataSet, bien definido se me soluciona el tema.
Ya nos contaras a ver que tal va el tema
Responder Con Cita
  #8  
Antiguo 06-08-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Hola,

Efectivamente comencé a cambiar el form de TTables a IBDataset, y aunque parece que algunas cosillas se solucionan, me han comenzado a dar otros errores, y a surgir dudas.

Por ejemplo,

1) ¿Cual es la diferencia, entre el ON POST, y el ON SERVER dentro de las propiedades del IBDataSet, generatorField, Apply Event? Por que, si uso 'on new record', veo que si antes del post, cancelo, el número que se le había asignado al nuevo registro, (ejem 1200) se "pierde", y al próximo registro que queramos insertar, se le asignará un número más que el que cancelamos, (esto es, el 1201), provocándose "huecos" en el campo auto numérico.

Pero en el caso del 'on post' y 'on server', la única diferencia que veo es que, en el on post, se muestra el valor directamente en su campo, cosa que, si quiero que el 'on server' haga, tengo que cerrar y volver a abrir el IBDataSet, para que me muestre el nuevo registro, con su valor correspondiente, en su campo correspondiente, (no funciona, en este caso, el refresh).

Lo que no sé, es si, a la hora de trabajar con estas opciones, afectará en algo más, una vez la aplicación este funcionando en varios puestos al mismo tiempo.


2) Tengo una "Tabla" en la aplicación, que sólo quiero usar para insertar nuevos registros. ¿es necesario que me muestre todos los registros o hay alguna manera de acotar los registros que muestra al mínimo posible?

3) en uno de los campos que tengo, en uno de mis form, necesito que sólo figure la hora, pero me aparece la fecha y la hora, lo cual es un problema para mi aplicación. ¿Hay alguna manera de que sólo me muestre, en el TDBEdit, lo que pido?

He probado con EditMask de las propiedades del propio campo, dentro de la tabla, pero no sirve de nada, sigue saliendo día y hora.



Muchas gracias,

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #9  
Antiguo 06-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Posteado originalmente por Giniromero
1) ¿Cual es la diferencia, entre el ON POST, y el ON SERVER dentro de las propiedades del IBDataSet, generatorField, Apply Event?
Sacado de la ayuda de Delphi

Cita:
Indicates when the TIBGeneratorField instance calls the server to generate a value for the associated field.

type TIBGeneratorApplyEvent = (gamOnNewRecord, gamOnPost, gamOnServer);
property ApplyEvent : TIBGeneratorApplyEvent;

Description

Set TIBGeneratorApplyEvent to indicate when the server generates field values using this generator. ApplyEvent has one of the following values:

Value Meaning

gamOnNewRecord The dataset calls the server to generate the field value immediately after it inserts or appends a new record (before the OnNewRecord event).
gamOnPost The dataset calls the server to generate the field value immediately before it posts a record to the server (before the BeforePost event).
gamOnServer The dataset does not need to call the server to generate field values: the server generates these values automatically. When ApplyEvent is gamOnServer, TIBGeneratorField serves primarily to ensure that the user is not required to enter a value in the field.

Note: Regardless of the value of ApplyEvent, applications can generate the field value at any time by calling the Apply method.
Si utilizas el gamOnServer, no veras los cambios hasta que no comfirmes la transaccion con un commit o un commitretaining

Cita:
Posteado originalmente por Giniromero
2) Tengo una "Tabla" en la aplicación, que sólo quiero usar para insertar nuevos registros. ¿es necesario que me muestre todos los registros o hay alguna manera de acotar los registros que muestra al mínimo posible?
No entiendo lo que quieres hacer. Podrias mirar de explicarlo algo mas?

Cita:
Posteado originalmente por Giniromero
3) en uno de los campos que tengo, en uno de mis form, necesito que sólo figure la hora, pero me aparece la fecha y la hora, lo cual es un problema para mi aplicación. ¿Hay alguna manera de que sólo me muestre, en el TDBEdit, lo que pido?

He probado con EditMask de las propiedades del propio campo, dentro de la tabla, pero no sirve de nada, sigue saliendo día y hora.
Utiliza el DisplayFormat con algo como hh:nn

Espero te sirva
Responder Con Cita
  #10  
Antiguo 07-08-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Hola,

Cita:
diferencia, entre el ON POST, y el ON SERVER
Bueno, creo que no me expliqué bien. Ya había visto lo que pone en la ayuda de delphi, pero ahí no aclara lo que a mi me preocupa, mi duda, espero que más claramente, es ¿si uso el método 'on post', para una aplicación que va a usarse en varios puestos a un mismo tiempo, ¿puedo tener problemas a la hora de asignar nº a los registros que puedan crearse en mi tabla, desde dos puestos distintos, a un mismo tiempo?, (que de el mismo nº a los dos o algo así) o tal vez dicho de otro modo
Cuando se recomienda usar uno y cuando el otro. (el 'on new record' directamente lo descarto).


En cuanto a:


Cita:
2) Tengo una "Tabla" en la aplicación, que sólo quiero usar para insertar nuevos registros. ¿es necesario que me muestre todos los registros o hay alguna manera de acotar los registros que muestra al mínimo posible?

vamos a ver... una de las tablas que tengo creadas en mi interbase, sólo me sirve para que yo le añada nuevos registros desde mi aplicación, en el form concreto en el que está ubicada, no la necesito para que me muestre registros, por lo tanto, como quiera que el IBDataSet, por lo que tengo entendido, funciona mejor cuanto menos registros "muestra", como hacer para no tener una definición en el select, que a efectos de funcionamiento, no sea como un TIBTable, que me esté "mostrando" todos los registros que tiene guardados


En cuanto a:
Cita:
Utiliza el DisplayFormat con algo como hh:nn
Esto lo había intentado, pero me confundí de formato, y le estaba poniendo hh:mm , y así pasaba... ahora parece que funciona. Sólo muestra la hora, aunque en la base de datos me guarda también la fecha, pero parece que mi aplicación lo ignora. (Sólo se ve la fecha que se guarda cuando quieres modificar ese campo)

Gracias por la ayuda

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #11  
Antiguo 07-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Posteado originalmente por Giniromero
Cuando se recomienda usar uno y cuando el otro. (el 'on new record' directamente lo descarto).
Yo normalmente utilizo el On Post de forma que mi transaccion dure lo menos posible, es decir

Código:
try
  IBDataset.Post
  IBTransaction.Commit; // o CommitRetaining
except
  IBTransaction.Rollback;
end;
y en el BeforePost es donde asigno el codigo. De esta manera, no recojo número hasta justo antes de acceptar el registro y mi transaccion es lo mas corta posible haciendo que los demas usuarios vean las modificaciones y no cause problemas

Cita:
Posteado originalmente por Giniromero
como hacer para no tener una definición en el select, que a efectos de funcionamiento, no sea como un TIBTable, que me esté "mostrando" todos los registros que tiene guardados
Bueno, si en lugar de tener un DBGrid tienes DBEdits (o lo que sea), ya no estaras mostrando todos los registros. A parte, tambien puedes utilizar la clausula where de la sentencia SQL y, si no recuerdo mal, la propiedad BufferChunks del TIBDataset tambien podria ayudarte.
Otra solución es no tener el IBDataset y tener Edits normales y, en el boton de aceptar, lanzar un SQL de Insert con un TIBQuery.

Cita:
Posteado originalmente por Giniromero
le estaba poniendo hh:mm
es que las "m" se refieren a los meses

Cita:
Posteado originalmente por Giniromero
aunque en la base de datos me guarda también la fecha
como te comenta kinobi en otro hilo, a partir de la version 6 de IB, existe el tipo de dato Time (con dialecto 3)
Responder Con Cita
  #12  
Antiguo 07-08-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Cita:
como te comenta kinobi en otro hilo, a partir de la version 6 de IB, existe el tipo de dato Time (con dialecto 3)
Cita:
aunque en la base de datos me guarda también la fecha
si, pero eso sólo funciona cuando el tipo de SQL es 3, y yo estoy usando el 1


Cita:
Yo normalmente utilizo el On Post de forma que mi transaccion dure lo menos posible,
Cita:
y en el BeforePost es donde asigno el codigo. De esta manera, no recojo número hasta justo antes de acceptar el registro y mi transaccion es lo mas corta posible haciendo que los demas usuarios vean las modificaciones y no cause problemas

Disculpa, pero no entiendo que quieres decir con 'de forma que mi transaccion dure lo menos posible', bueno, en realidad, no entiendo muy bien lo que me quieres decir con todo esto.

Gracias por la ayuda

virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #13  
Antiguo 07-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Posteado originalmente por Giniromero
Disculpa, pero no entiendo que quieres decir con 'de forma que mi transaccion dure lo menos posible', bueno, en realidad, no entiendo muy bien lo que me quieres decir con todo esto.
Yo tengo una tabla de contadores. Por trigger (AfterInsert) doy el nuevo numero a la fila que estoy insertando (esto se realiza al hacer el Post en el TIBDataSet). Como justo despues del Post hago un Commit de la transaccion, el espacio de tiempo en que no son "visibles" los cambios en la tabla de contadores para los demas usuarios es practicamente nulo

En mi caso, yo utilizo una tabla de contadores, pero tu puedes utilizar lo que mas te guste (un generador, una consulta SQL,....)

Bueno, espero esto sea algo mas explicatorio
Responder Con Cita
  #14  
Antiguo 11-08-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Creo que esta vez me ha quedado claro.

Gracias por la ayuda.

Saludos

Virginia

__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:09:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi