PDA

Ver la Versión Completa : mssql


scooterjgm
16-09-2004, 10:48:30
uso mssql server en una aplicacion delphi y el grupo de componentes dbexpress para conectar con ella. en el test me valida la conexion...

pues bien, cuando ejecuto la aplicacion, realiza las consultas correctamente pero no almacena los valores en las variables por lo q me da errores. alguien sabe a q se debe esto??

me carga correctamente el resultado de la consulta en los grids pero al no recogerlos en las variables cuando hago otra consulta pasandole el valor de esa variable me da error.

alguien puede ayudarme??

muchas gracias

__hector
16-09-2004, 17:48:22
codigo... muestranos algo de codigo ;)

scooterjgm
17-09-2004, 10:04:06
ejecuto la siguiente instruccion y me da un error:

ASSERT(FechaOperacion <> 0);

Hago un ShowMessage de la variable y unas veces me sale bien y otras me sale 31/12/2004, es decir la fecha q tiene q devolver la consulta SQL. Si ejecuto la misma consulta en el MSSQL Server me devuelve el siguiente valor:

2004-12-31 00:00:00.000

El campo de BD es datetime y lo almaceno en una variable TDateTime

FFechaFin := FSqlQuery.fieldbyname('ID_FECHA_FIN').asdatetime;

Esto me pasa con este dato pero tb me pasa con otros.

guillotmarc
17-09-2004, 10:38:21
Hola.

Deberias poner también como abres el Query, puesto que allí parece estar el problema.

NOTA: ¿ Como conectas un SQLQuery a una DbGrid ?, No puede hacerse.

Probablemente utilizes un ClientDataset para enlazarlo a la Grid. Entonces la fecha también deberias consultarla en el ClientDataset y no en el SQLQuery. (Cuando un SQLQuery proporciona datos a un ClientDataset, se cierra automaticamente al final).

Saludos.

scooterjgm
17-09-2004, 11:13:11
Esta en un componente que se llama Arbol. esta todo declarado y accedo a este valor asi: Arbol.FFechaInicio que se lo paso a la variable asi:
FechaIni:TDateTime;
FechaIni:= Arbol.FFechaInicio;

Durante toda la aplicación uso este dato. Por algún motivo no lo recoje bien y me sale esta fecha en su lugar: 30/12/1899


La consulta del componente la hago asi:

FSqlQuery.Close;
FSqlQuery.SQL.clear;
FSqlQuery.SQLConnection := FSqlConnection;
S:=format('Select ID_FECHA_INI,ID_FECHA_FIN from CNT%s where ID_ISON =''%s'' AND ID_COD_EMP =''%s'' and ID_COD_CONT=''%s''',[FISON+FEMP,FISON,FEMP,FCONT]);
FSqlQuery.SQL.Add(S);
FSqlQuery.Open;
FFechaInicio:= FSqlQuery.fieldbyname('ID_FECHA_INI').asdatetime;
FFechaFin := FSqlQuery.fieldbyname('ID_FECHA_FIN').asdatetime;

Ejecuto este código en el analizador de consultas de SQL Server y me dá los resultados correctos con este formato: 2004-12-31 00:00:00.000

El codigo está en un componente que es el que realiza la consulta. Almacena el valor y luego con la variable recojo ese valor.

Lo de los grids es por otro lado. En la aplicación tengo Grids que si recogen los datos del SQL Server.

No entiendo pq recoje los datos por una parte y luego por la otra no los almacena :(

¿puede ser del formato de la base de datos?

Antes la tenía en FireBird y funcionaba perfectamente en un campo de tipo DATE, ahora la tengo en un campo de tipo DATETIME. No he cambiado ningún componente ya que con los dbExpress de Delphi7 también puedo acceder a bases de datos MSSQL.

Gracias por todo.