| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
seth Cmdr

Registrado: 16 Nov 2003Mensajes: 129
|
Publicado: Vie 05 Ene, 2007 1:06 am Asunto: cosultar si esta en una tabla |
|
|
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 |
|
 |
Mario Cdt


Registrado: 23 Sep 2004Mensajes: 22Ubicación: Tijuana B.C., México
|
Publicado: Vie 05 Ene, 2007 1:54 am Asunto: |
|
|
puedes usar despues de abrir el query [Query1->Open()]:
Query1->Eof
o
Query1->IsEmpty _________________ Mario. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 05 Ene, 2007 10:01 am Asunto: |
|
|
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 |
|
 |
seth Cmdr

Registrado: 16 Nov 2003Mensajes: 129
|
Publicado: Sab 06 Ene, 2007 12:30 am Asunto: Gracias por responder |
|
|
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 |
|
 |
tronxx Lt JG


Registrado: 30 May 2003Mensajes: 56Ubicación: Merida, Yucatan, Mexico
|
Publicado: Sab 06 Ene, 2007 2:20 am Asunto: |
|
|
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í.
 _________________ La caja decía, requiere Win95 o superior así que instalé Linux. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Sab 06 Ene, 2007 10:28 am Asunto: |
|
|
¡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 |
|
 |
seth Cmdr

Registrado: 16 Nov 2003Mensajes: 129
|
Publicado: Mar 09 Ene, 2007 10:07 pm Asunto: Concejo de Tabla... |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 10 Ene, 2007 9:30 am Asunto: |
|
|
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 |
|
 |
seth Cmdr

Registrado: 16 Nov 2003Mensajes: 129
|
Publicado: Mar 16 Ene, 2007 12:54 am Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 16 Ene, 2007 9:53 am Asunto: |
|
|
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 |
|
 |
seth Cmdr

Registrado: 16 Nov 2003Mensajes: 129
|
Publicado: Mar 16 Ene, 2007 2:49 pm Asunto: Archivo de Ejemplo |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
|