Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

cosultar si esta en una tabla

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: cosultar si esta en una tabla Responder citando

Buenas Noches..

tengo dos tablas RName y RTime las cuales estan relacionadas
RNames tiene los nombres de los usuarios y su numero de identificacion
y en RTime esta numero de identificacion, fecha, hora.
Quiero registrar la entradas de los usuarios. Pero un usuario debe estar en RName para poder grabar su ingreso en RTimes...
estoy haciendo lo siguente

Table1->Open();
Query1->SQL->Add("SELECT * FROM RNAME.dbf WHERE IDENTIFICA = '88021808'");
pero no se como saber si esta o no algo
if ( ) {
showmessage ("usuario no registrado");
}
else {
//grabar en RTimes

}


agradesco sus concejos y la ayuda

saludos..
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

puedes usar despues de abrir el query [Query1->Open()]:

Query1->Eof
o
Query1->IsEmpty
_________________
Mario.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Yahoo Messenger
Mensaje    Asunto: Responder citando

Yo haría un SELECT COUNT:
Código:
Query1->Close();
Query1->UnPrepare();
Query1->SQL->Text = "SELECT COUNT(*) Ficha FROM 'RNAME.dbf' WHERE IDENTIFICA = '88021808';
Query1->Prepare();
Query1->Open();
if (Query1->FieldByName("Ficha")->AsInteger == 0)
     ShowMessage("Usuario no identificado");
else
     [Graba en RTimes]

También podrías usar un GotoKey o un Locate, según la tabla Rname esté o no indexada. Si está indexada por ese campo IDENTIFICA:
Código:
Table1->Open();
Table1->FieldByName("Identifica")->AsString = "88021808";
if (!Table1->GotoKey())
     ShowMessage("Usuario no identificado");
else
     [Graba en RTimes]

Si no está indexada:
Código:
Table1->Open();
if (!Table1->Locate("Identifica", "88021808", TLocateOptions()))
     ShowMessage("Usuario no identificado");
else
     [Graba en RTimes]

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Gracias por responder Responder citando

Angel el primer metodo no me funciono siempre dice que no esta registrado y si se intenta hacer una nueva consulta se genera un error...

con la tabla no indexada funciona perfectamente ...
pero si me gustaria como se indexa la tabla en ese campo no lo se hacer saludos y grascias..
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

puedes hacer Query1->IsEmpty()

y si es empty entonces no existe el dato que estas buscando

Para indexar entra a tu manejador ( creo que es Fox ?, pero no Vicente Fox, Fox Database, je je je ) y lo buscas allí.
Confused
_________________
La caja decía, requiere Win95 o superior así que instalé Linux.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

¡Qué raro que no te funcione el SELECT COUNT! La opción de tronxx también es buena. Si quieres indexar una tabla ya existente puedes hacerlo con un query SQL:
Código:
Query1->Close();
Query1->UnPrepare();
Query1->SQL->Text = "ALTER TABLE 'RNAME.dbf' PRIMARY KEY(IDENTIFICA)";
Query1->Prepare();
Query1->ExecSQL();

El problema es que, en cualquier caso, la columna o columnas que vayas a utilizar en el índice primario tienen que estar necesariamente definidas al principio de la tabla.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Concejo de Tabla... Responder citando

Buenas Tardes.

Estoy aprendiendo hasta ahora como manejar y crear Bases de Datos, estoy haciendo una aplicacion que me puse como ejemplo de aprendizaje...
consta de lo siguiente:
cree dos tabla Rname.dbf y RTime.dbf.
En la tabla RName tengo los siguientes campos:
Idetificacion, Nombre, Direccion, Telefono_casa, Telefono_movil
En la Tabla RTime tengo los sigguientes campos
Identificacion, Fecha, Hora, Estado
en la tabla RName registro todos los Empleados de Una Empresa.
Y en la Tabla RTime las fechas y horas de llegada de cada empleado de y en estado "E" para ingresos y "R" salida.
Tengo en la aplicacion dos TTable cada una para cada tabla y un TQuery con la voy ha realizar las consultas..
Preguntas:
1. como puedo realizar la consulta de fechas donde me muestre en una tabla por cada empleado la fecha y la hora de entrada y la hora de salida
algo asi Nombre, Identificacion, Fecha, Hora_ingreso, Hora_Salida.

2. No se si sera mas complicado hacer una modificacion a la tabla de RTimes de modo que tenga la siguiente estructura.
Identificacion, Fecha, Hora_ingreso, Hora Salida.
en el momento de hacer una insercion se debe primero verificar que el Numero de Identificacion del empleado se encuentre registrado en la Tabla de RName(estra parte ya la tengo"). tener en cuenta que los registros de entrada y salida no se hacen al tiempo.

acpeto toda clase de concejos.

saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Hola Seth.

Siguiendo con el tema del índice. Si la estructura de las tablas es la que has descrito puedes crear el índice sin tener que tocar la estructura de la misma como te indicaba en mi mensaje anterior o bien con la instrucción CreateTable del propio Builder.
Código:
Table1->AddIndex("", "Identificacion", IndexOptions() <<ixPrimary << ixUnique);

Cita:
como puedo realizar la consulta de fechas donde me muestre en una tabla por cada empleado la fecha y la hora de entrada y la hora de salida

Depende de lo que quieras: ¿Qué se vayan mostrando uno a uno o generar un informe completo agrupado por empleados?

En el primer caso podrías construir una consulta basada en un bucle:
(Suponiendo que Table1 es Rname.dbf y Table2 Rtime.dbf)
Código:
Query1->Close();
Query1->UnPrepare();
Query1->SQL->Text = "SELECT * FROM Rtime.dbf WHERE Identificacion = :Identificacion";

Table1->Open();
while (!Table1->Eof)
{
     Query1->Close();
     Query1->UnPrepare();
     Query1->ParamByName("Identificacion")->AsString = Table1->FieldByName("Identificacion")->AsString
     Query1->Prepare();
     Query1->Open();

     [Aquí puedes poner el código para tratar la información del Query]

     Query1->Next();
}

Si lo que quieres es un solo query para todo podrías ser algo así:
Código:
Query1->Close();
Query1->UnPrepare();
Query1->SQL->Text = "SELECT A.Identificacion, A.Nombre, B.Fecha, B.Hora FROM Rname.dbf A, Rtime.dbf B WHERE A.Identificacion = B.Identificacion ORDER BY A.Identificacion, B.Fecha, B.Hora";
Query1->Prepare();
Query1->Open();

Con esto obtendrías una tabla con todas las entradas ordenadas por persona, fecha y hora. Te bastaría crear ahora un informe utilizando un elemento QRGroup y usando como elemento agrupador (QRGroup1->Expression) la identificación.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Buenas noches.

Angel gracias a tu ayuda.. pero no me funciono asi...
despues de mucho probar y consultar encontre esto.

SELECT R1.iden, R1.FECHA & " " & R1.HORA AS ENTRADA, R2.FECHA & " " & R2.HORA AS SALIDA
FROM RTime AS R1 INNER JOIN RTime AS R2 ON (R1.Fecha = R2.Fecha) AND (R1.iden = R2.iden)
WHERE R1.estado ="ENTRADA" AND R2.ESTADO ="SALIDA"

cree esta misma tabla en access para ejecutar la consulta mas rapidamente y bingo me funciono mostrandome lo que buscaba, pero ahora trato de ejecutar esta usando un TQuery y en la propiedad SQL coloco esta rutina y no me funciona hay algo en esta sentencia SQL que no me permita ejecutar ..

Me da un error :
Project qjoin.exe raised exeception class EDBEngineError with message Invalid use of keyword.
Token: (R1.fecha
Line Number: 2'. Process stopped. Use Step or Run to continue.

saludos..
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Para hacer concatenaciones en un query en Builder, en lugar de con & prueba con ||, y en lugar de comillas (") con apóstrofo ('):
Código:
SELECT R1.iden, R1.FECHA||' '||R1.HORA AS ENTRADA, R2.FECHA||' '||R2.HORA AS SALIDA FROM RTime AS R1 INNER JOIN RTime AS R2 ON (R1.Fecha = R2.Fecha) AND (R1.iden = R2.iden) WHERE R1.estado ="ENTRADA" AND R2.ESTADO ="SALIDA"

Al margen de esto, en la empresa en la que yo trabajo tengo un control de acceso de visitas, que más o menos funciona igual con la única diferencia que si los datos de la visita no están en la tabla de personas, los grabo y mantengo un mes como máximo. Para comprobar si la visita está dentro o no simplemente verifico que el campo hora de salida esté vacío.

Por si te vale Bájate este fichero. Es la aplicación que te comento, por si te vale.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Archivo de Ejemplo Responder citando

Buenos Dias...
Angel podrias volver a colocarlo al parecer este vinculo esta roto o ami correo seth_los@yahoo.com

Agradezco tu colaboracion.

saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Acabo de mandártelo por correo.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.