PDA

Ver la Versión Completa : Saber el valor de un Dataset


jocey
30-11-2007, 15:34:58
Buenas a toda la familia del club, hoy vengo con una nueva pregunta, miren tengo un ADODATASET y lo uso para hacer una consulta a una base de datos en SQL para filtrar por dos fechas, pero si le paso como fecha un intervalo que no existe en la tabla me da un error al abrir el DATASET como es de esperar, ahora les pongo el codigo para que vean lo que estoy tratando de hacer y me orienten, en escencia lo que quiero es saber cuando el DATASET encontro el rango de fechas y cuando no???

Gracias a todos ya de antemano


PathBD := ExtractFilePath(Application.ExeName);
CadenaConexion := 'Provider=SQLOLEDB.1;Password=center;Persist Security Info=True;User ID=center;Initial Catalog=CE;Data Source=jocey';
DataSetrepofechas.ConnectionString := CadenaConexion;
DataSetrepofechas.CommandText := 'select * from principal WHERE principal.Fecha_Inicio Between ''' + dia1 + ''' And ''' + dia2 + '''';
if DataSetrepofechas.Recordset = nil then
begin
ShowMessage('Fuera de Fecha')
end
else
begin
DataSetrepofechas.Open;
textcurso.Caption := DataSetrepofechas.fieldbyname('Nombre_Curso').value;
textlugar.Caption := DataSetrepofechas.fieldbyname('Lugar_Ejecucion').value;
textcliente.Caption := DataSetrepofechas.fieldbyname('Cliente').value;
textcontrato.Caption := DataSetrepofechas.fieldbyname('No_Contrato').value;
textfecha.Caption := DataSetrepofechas.fieldbyname('Fecha_Inicio').value;
textestado.Caption := DataSetrepofechas.fieldbyname('Estado_Curso').value;
textdias.Caption := DataSetrepofechas.fieldbyname('dias').value;
formrefechas.QuickRep1.Preview;
DataSetrepofechas.Last;
DataSetrepofechas.Close;
end;
end;
end;

tefots
30-11-2007, 17:14:49
..
..........................

jocey
30-11-2007, 18:30:27
Que paso amigo ? No me explique bien? bueno en fin ya lo resolvi el Dataset tiene una propiedad que se llama RecordCount y si esta en cero es que no tiene valores y si es mayor lo contrario, pero bueno me disculpan por mi pregunta mal formulada, aunque me parece que al responder esto se puede hacer saber con otra respuesta, aqui estamos para ayudarnos...... me parece

Lepe
30-11-2007, 21:37:05
Hombre, 5 horas no es mucho desde que pusiste el original.

La base de datos dices ser SQL, pero no dices cual :confused:

En todo caso, el RecordCount no suele estar implementado en tablas SQL, ya que es costoso averiguar los datos.

Si no hay registros en un rango de fechas, no suele dar error nada, simplemente se muestra vacía la consulta. "DataSetrepofechas.IsEmpty" es true y puedes informar al usuario de que la consulta no devolvió datos, por ende, no es necesario ver el informe ni su presentación preliminar.

Deberías plantearlo así:

PathBD := ExtractFilePath(Application.ExeName);
CadenaConexion := 'Provider=SQLOLEDB.1;Password=center;Persist Security '+
'Info=True;User ID=center;Initial Catalog=CE;Data Source=jocey';

DataSetrepofechas.ConnectionString := CadenaConexion;
DataSetrepofechas.CommandText := 'select * from principal WHERE Fecha_Inicio Between :dia1 and :dia2';
DataSetrepofechas.Parameters.Parambyname('dia1').Value := datetimepicker1.date;
DataSetrepofechas.Parameters.Parambyname('dia2').Value := datetimepicker2.date;
DataSetrepofechas.Open;
if DataSetrepofechas.IsEmpty then
begin
ShowMessage('No hay registros ')
end
else
begin
textcurso.Caption := DataSetrepofechas.fieldbyname('Nombre_Curso').value;
textlugar.Caption := DataSetrepofechas.fieldbyname('Lugar_Ejecucion').value;
textcliente.Caption := DataSetrepofechas.fieldbyname('Cliente').value;
textcontrato.Caption := DataSetrepofechas.fieldbyname('No_Contrato').value;
textfecha.Caption := DataSetrepofechas.fieldbyname('Fecha_Inicio').value;
textestado.Caption := DataSetrepofechas.fieldbyname('Estado_Curso').value;
textdias.Caption := DataSetrepofechas.fieldbyname('dias').value;
formrefechas.QuickRep1.Preview;
DataSetrepofechas.Last;
DataSetrepofechas.Close;
end;
end;
end;

Así no tendrás tampoco problemas de formatos de fecha dd/mm/yyyy o mm/dd/yyyy etc.

Saludos