PDA

Ver la Versión Completa : Manejo de Fechas de vencimiento en delphi 7


luisraad
16-09-2011, 18:51:58
buenas tardes como veran soy novato tanto en la pagina web de delphi como en el programa...
la duda es a siguiente... tengo una base de datos hecha en microsoft access, y conectada con delphi 7 mediante componentes ADOquery, ADOtables DBgrid, y DATAsource, por lo cual estamos desarrollando una aplicacion para una farmacia en la que ingresamos los medicamentos e insertamos la fecha de vencimiento del medicamento para que en el DBgrid nos liste los medicamentos que estan a punto de vencer.
tenemos idea de lo que queremos hacer el problema es como?, nuestro tutor nos dio unos pasos pero en verdad lo que quiero es que al ingresar la fecha de caducidad esta se compare con la fecha del sistema (Datetimepicker), pero no hemos conseguido la manera de que funcione,
osea la idea es que al compararse con el datetimepicker le indicamos mediante la consulta SQL que nos muestre en el DBGrid los medicamentos que les queden minimo de 20 dias antes de ser vencidos, por favor ayudenme no se ni en donde se hace la pregunta por eso lo escribo aqui les agradezco

luisraad
17-09-2011, 20:00:07
haber muchachos Buenas Tardes...

Soy estudiantes de programacion de software basico.
estoy realizando una aplicacion, muy parecido a un software de control de inventarios, en donde el usuario podra ingresar el nombre de los medicamentos la fecha de caducidad en una tabla creada en la base de datos de acces ejemplo:

tabla cuarentena tiene los siguientes campos:
COD_MEDICAMENTO, N_MEDICAMENTO, F_CADUCIDAD

la tabla esta conectada a delphi mediante componentes ADO, tengo un DBGrid que es donde me va a listar los medicamentos en peligro de vencerse.

entonces la idea que tengo es colocar un datetimepicker que trae de manera automatica la fecha actual del sistema y esta misma compararla y restarla con el campo F_CADUCIDAD de la base de datos ((el cual suena facil, pero llevo rato sin dar con el codigo)), necesito de su colaboracion, estare atento a la respuesta

gracias

Casimiro Notevi
17-09-2011, 20:23:25
¿Pero qué problemas tienes?, exactamente qué necesitas, qué código tienes, en qué parte es en la que necesitas ayuda?

luisraad
17-09-2011, 21:56:58
haber. casimiro

el problema es que no tengo un cosigo en si...

quiero que es un DBGRID me liste o muestre los productos que estan a punto de ser vencidos para ello es necesario restar la fecha que se ingresa de vencimiento de los medicamentos a la fecha actual del sistema osea del computador al restar los valores este debe arrojar los dias de difenrecia esos mismos dias serian los restantes para que el medicamento caduque y alli se pone la ocndicion que si esos dias son 2o entonces los liste o muetre en el dbgrid

posdata
trabajo con SQL consulto el campo F_CADUCIDAD y ese mismo lo debo restar con un componente llamado Datetimepicker que trae la fecha actual del sistema y ese me debe dar los dias restantes pero no se como hacerlo creo que fui claro si no me toca darte mi msn y te explico mejor grax por la respuesta men

Casimiro Notevi
17-09-2011, 22:23:50
Bien, amigo, pero nada de msn ni email privado, ni nada de eso, porque entonces no sirve de nada los foros. Como bien sabrás, en los foros se hacen preguntas y se contestan para que otras personas con problemas o dudas similares puedan hacer búsquedas y encontrar la respuesta. Si se hace "privadamente" entonces no hay soluciones y los foros no sirven de nada.

Bien, una vez soltado el rollo, y en espera de que hayas leído nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php) ;), vamos al lío:

Tú tienes una tabla en la base de datos con productos y entre los campos están su CODIGO, NOMBRE Y FECHACADUCIDAD.
Ahora quieres consultar los productos que caduquen en xx días a partir de la fecha actual, ¿es eso?

Bien, entonces debes preguntar el número de días que quieras y luego hacer el select, algo así:

Suponemos que el usuario escribe: 20 días, entonces sería:

select * from tbMedicamentos where fechacaducidad < 'now'+20

Ahora bien, si el usuario puede poner cualquier fecha y cualquier cantidad de días, entonces es mejor que te crees el select con parámetros y se los pases, por ejemplo, tienes un query:

query.close;
query.sql.text:='select * from tbMedicamentos where fechacaducidad < :lafecha + :numerodias';
query.params[0] := tudatetimerpicker.date;
query.params[1] := strtoint(tuedit.text);
query.open;


Evidentemente, el query estará asociado a un datasource y el datasource al dbgrid donde quieras mostrar los datos.

luisraad
17-09-2011, 22:45:27
bueno entendi, pero poseemos problemas ejje tienes qe tenerme un poco de pasiencia.

estoy trabajando con componentes ADO cuando copio el codigo le pongo ADO a el query que me posteas en tu ejemplo y me arroja error en el datetimepicker y en los parametros de hecho esos parametros son os que arrojan error

el error dice algo de que se desconoce la palabra 'params'... y el codigo si lo entiendo hasta mira no se me habia ocurrido de que el cliente puede listar escojiendo el mismo los numeros de dias restantes elcodigo lo entiendo pero no se como meterlo a la forma

Casimiro Notevi
17-09-2011, 22:49:21
Claro, el código que he puesto antes "no funciona", era sólo como referencia para adaptarlo a lo que estás haciendo tú, que como no tengo ni idea de qué código usas, ni qué componentes, ni nada de nada... es sólo eso, para que te hagas una idea.

luisraad
17-09-2011, 22:52:06
bueno mira traduciendo lo que me escribes hago esto


ADOQuery1.close;
ADOQuery1.sql.text:='select * from MEDICAMENTOS where fechacaducidad < :lafecha + :numerodias';
ADOQuery1.Parameters.ParamByName('0') := datetimepicker1.date;
ADOTable1.parameters.parambyname('1') := strtoint(edit1.text);
ADOQUERY1.open

los corchetes que contienen los parametros dan error y los parentesis no... el error da a la asigacion!!!

luisraad
17-09-2011, 22:57:31
base de datos hecha en microsoft access
uso delphi 7

esta base de datos esta conectada a delphi mediante componentes ADO y tengo esto:

ADOconection
ADOtable
ADOQuery
(2) dataSource
1 DBGrid

el adoconection esta con el motor de la base de datos o algo asi
el adotable contiene la tabla 'MEDICAMENTOS' de la base de datos
el adoquery pues esta conectado con el adoconection y en el SQL la consuta select* from MEDICAMENTOS F_CADUCIDAD
y el dbgrid asociado al ADOQuery el datasource 2 con el adoquery1 y el datasource1 con el adotable1

de esta manera

oscarac
17-09-2011, 23:05:57
cual es la sentencia que estas colocando en el Adoquery?
tiene parametros?


Adoquery1.close;
Adoquery1.sql.text:='select * from tbMedicamentos where fechacaducidad < :lafecha + :numerodias';
Adoquery1.params[0] := tudatetimerpicker.date;
Adoquery1.params[1] := strtoint(tuedit.text);
Adoquery1.open;

si adecuas tu sentencia a la que te mostro casimiro en el ejemplo anterior, te deberia funcionar

Casimiro Notevi
17-09-2011, 23:23:30
Adoquery1.close;
Adoquery1.sql.text:='select * from tbMedicamentos where fechacaducidad < :lafecha + :numerodias';
Adoquery1.params[0].asdatetime := tudatetimerpicker.date;
Adoquery1.params[1].asinteger := strtoint(tuedit.text);
Adoquery1.open;


Creo que falta el tipo de campo, se supone que serán esos, como tampoco lo has dicho.

luisraad
17-09-2011, 23:24:05
mira lo cooque asi:

Adoquery1.close;
Adoquery1.sql.text:='select * from MEDICAMENTOS where F_CADUCIDAD < :lafecha + :numerodias';
Adoquery1.Parameters.ParamByName('0') := datetimepicker1.date;
Adoquery1.Parameters.ParamByName('1') := strtoint(edit1.text);
Adoquery1.open;


y en el SQL del ADOQUERY:
select * from MEDICAMENTOS where F_CADUCIDAD < :lafecha + :numerodias

al compilar salen estos errores:
left sides cannot assigned ((supongo que es en la asignacion del datetimepicker1.date caundo se lo asignamos al parambyname('0')..))

incompatible types 'Tparameter and Tdate

la raya roja del error fatal jeje señala las lineas de los parametros

oscarac
17-09-2011, 23:32:13
los nombres de los parametros estan mal

pruebalo asi
Adoquery1.Parameters.ParamByName('Lafecha') := datetimepicker1.date;
Adoquery1.Parameters.ParamByName('numerodias') := strtoint(edit1.text);

luisraad
17-09-2011, 23:33:02
haber ya habia practicado con algo de la siguiente forma pero este solo me trae los vencidos y los que estan por vencerse cuando inserto el codigo del medicamento...

que hace???

consulta la tabla y compara el codigo del medicamento, consulta su fecha de caducidad y la compara con un datetimepicker y asi si me funciona... pero quiero hacer lo que vengo explicando desde arriba en el foro


var
c:string;
begin
if (edit1.text<>'')then
begin
c:='';
C:='select MEDICAMENTOS.F_CADUCIDAD from MEDICAMENTOS where MEDICAMENTOS.COD='+comilla.Text + edit1.Text + comilla.text;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(c);
ADOQuery1.Active:=True;
edit2.Text:=ADOQuery1.Fields.Fields[0].AsString;
c:='select MEDICAMENTOS.COD, MEDICAMENTOS.NOMBRE, MEDICAMENTOS.F_CADUCIDAD from MEDICAMENTOS where MEDICAMENTOS.COD='+comilla.Text + edit1.Text + comilla.text;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add(c);
ADOQuery2.Active:=True;

Edit1.Clear;
end;
if Edit2.Text=DateToStr(DateTimePicker1.Date) then
begin
Application.MessageBox('Medicamento Expiró','FarmaSoft',MB_OK);
end
else begin
Application.MessageBox('No Hay Medicamentos Vencidos','FarmaSoft',MB_OK);
end;

end;

el campo comilla.text es un edit que contiene una comilla puesto delphi molesta con las consultas que llevan multiples ' ' espero me entiendan

oscarac
17-09-2011, 23:39:10
para el tema de las comillas puedes usar quotedStr()

ejemplo

Select Codigo from tabla where Codigo = quotedStr(edit1.text)

2 tu codigo me parece algo complicado...
para que se utiliza el edit2?
el c:= '' no es necesario cuando asignas a la variable c la cadena del Query

luisraad
17-09-2011, 23:49:28
jajajajaja haber amigo

nuestro profesor nos dijo jaja lo de las comillas que locura ahora fue que vine a darme cuenta.. buen aporte.

lo otro es que ese edit2 es para que se traiga el campo F_CADUCIDAD y este se compate con el datetimepicker imaginate!!! pero aja amigo que hacemos es el concepto de nuestro tutor

Casimiro Notevi
17-09-2011, 23:53:53
Recuerda poner etiquetas al código, ejemplo:

http://neftali.clubdelphi.com/images/UtilizarTAGs.png



.

luisraad
18-09-2011, 00:02:33
Bueno ya ensaye varios y no consigo hacerlo...

al parecer nuestro profesornos explico de otra manera distinta y para colmo dificil!! recurri al foro en busca de ayuda pero veo que son muy avanzados por o menos en lo de las comillas es algo que creo que nuestro profesor ni lo sabe

Casimiro Notevi
18-09-2011, 00:16:38
Veamos, pega aquí el código que tienes, y no lo cambies, sobre ese código te decimos qué debes cambiar.

luisraad
18-09-2011, 00:30:41
Adoquery1.close;
Adoquery1.sql.text:='select * from MEDICAMENTOS where F_CADUCIDAD < :lafecha + :numerodias';
Adoquery1.Parameters.ParamByName('0') := datetimepicker1.date;
Adoquery1.Parameters.ParamByName('1') := strtoint(edit1.text);
Adoquery1.open;


es asi que lo estoy haciendo y me da error en la parte de (:=) en los parametros

Caral
18-09-2011, 00:34:07
Hola

doquery1.close;
Adoquery1.sql.text:='select * from MEDICAMENTOS where F_CADUCIDAD < :lafecha + :numerodias';
Adoquery1.Parameters[0].Value := datetimepicker1.date;
Adoquery1.Parameters[1].value := strtoint(edit1.text);
Adoquery1.open;
Saludos

oscarac
18-09-2011, 00:34:50
hace 1 hora te dije como hacerlo
en lugar de poner '0' y '1', coloca los nombres de los parametros

lafecha
numerodias

Adoquery1.Parameters.ParamByName('Lafecha') := datetimepicker1.date;
Adoquery1.Parameters.ParamByName('numerodias') := strtoint(edit1.text);

Caral
18-09-2011, 00:41:04
Hola
hace 1 hora te dije como hacerlo
en lugar de poner '0' y '1', coloca los nombres de los parametros

lafecha
numerodias

Adoquery1.Parameters.ParamByName('Lafecha') := datetimepicker1.date;
Adoquery1.Parameters.ParamByName('numerodias') := strtoint(edit1.text);


Adoquery1.Parameters.ParamByName('Lafecha') QUE???? := datetimepicker1.date;
Adoquery1.Parameters.ParamByName('numerodias') QUE???? := strtoint(edit1.text);

Estas seguro amigo?.
El parametro de que tipo es???.

No sera:

Adoquery1.Parameters.ParamByName('Lafecha').value := datetimepicker1.date;
Adoquery1.Parameters.ParamByName('numerodias').value := strtoint(edit1.text);

?????:confused:
Saludos

oscarac
18-09-2011, 00:42:31
falta cafe amigo caral

sorry me olvide poner el .value

Caral
18-09-2011, 00:44:08
Hola
Te voy a enviar una jarra para que no te falte.:D;)
Saludos

luisraad
18-09-2011, 00:53:52
vamos a retomar de nuevo el tema amigos.
en referencia a lo que he posteado anteriormente quiero una aplicacion que me traiga la fecha de los medicamentos en el campo F_CADUCIDAD y me los compare con un datetimepicker...

me dieron este codigo


doquery1.close;
Adoquery1.sql.text:='select * from MEDICAMENTOS where F_CADUCIDAD < :lafecha + :numerodias';
Adoquery1.Parameters[0].Value := datetimepicker1.date;
Adoquery1.Parameters[1].value := strtoint(edit1.text);
Adoquery1.open;

este debe traerme los medicamentos especificandole los dias antes de su vencimiento ejemplo:le pongo 20 al (edit)y este me debe traer los medicamentos que les hace falta 20 dias para vencerseme da un error ' no coincide la expersion de criterios' ((pero ya compila))

Caral
18-09-2011, 00:55:20
Hola

Adoquery1.close;
Adoquery1.sql.text:='select * from tbMedicamentos where fechacaducidad < :lafecha + :numerodias';
Adoquery1.params[0].asdatetime := tudatetimerpicker.date;
Adoquery1.params[1].asinteger := strtoint(tuedit.text);
Adoquery1.open;


Creo que falta el tipo de campo, se supone que serán esos, como tampoco lo has dicho.
Amigo ADO no tiene params[ ] genera un error.
Es una de las cosas que cambia con IBX.
Ado usa Parameters[ ].
Saludos

luisraad
18-09-2011, 00:55:32
doquery1.close;
Adoquery1.sql.text:='select * from MEDICAMENTOS where F_CADUCIDAD < :lafecha + :numerodias';
Adoquery1.Parameters[0].Value := datetimepicker1.date;
Adoquery1.Parameters[1].value := strtoint(edit1.text);
Adoquery1.open;

este es el codigo que pena se daño en el anterior mensaje

Caral
18-09-2011, 00:58:44
Hola
No coincide la expresion de criterios por que estas sumando mal el edit a la fecha.
Habria que ver en que formato as puesto la fecha en la tabla.
Creo que puedes colocar el programa completo aqui.
Quitale el exe, ponlo en un zip y subelo, lo reviso y te digo las fallas.
Saludos

luisraad
18-09-2011, 00:59:43
cuando me hablan del tipo de campos a que se refieren exacamente... el tipo de campo fecha en la base de datos es TEXTO... osea el campo F_CADUCIDAD, no esta en FECHA/HORA si no TEXTO en la base de datos de access

Caral
18-09-2011, 01:00:29
Hola
Ahi esta el error
Saludos

Casimiro Notevi
18-09-2011, 01:04:29
cuando me hablan del tipo de campos a que se refieren exacamente... el tipo de campo fecha en la base de datos es TEXTO... osea el campo F_CADUCIDAD, no esta en FECHA/HORA si no TEXTO en la base de datos de access

:confused::confused::confused::eek::eek::eek: pues vale :):p

Caral
18-09-2011, 01:06:12
Hola
Estas haciendo una comparacion de un Datetimepicker que es tipo Date con un campo que es tipo Text.
Access en esto es un poco quisquillosa ya que genera un signo numerico a la fecha algo como esto #.
Es algo complicado si no se sabe, pero muy sencillo una vez que se conoce esto.
Saludos

luisraad
18-09-2011, 01:10:05
ustedes son exc elentes jejej me agrada eso... haber moderador sera que puedo adjuntar un archivo y istedes lo checan es la aplicacion tiene la base de datos y la forma de delphi puedo???:D

Caral
18-09-2011, 01:12:14
Hola
Se habra ganado el derecho a poner archivos ????:confused:
A ver ;):D
Saludos
PD: Creo que se tiene que postear un numero x, pero no se cual es..:D

luisraad
18-09-2011, 01:14:22
caral
en el campo en donde tengo el espaci de guardar el medicamento en la parte de insertar la fecha de caducidad no tengo un datetimepicker tengo es un edit.text que me recibe la fecha de vencimiento... pues mi tutor es el que me esta guiando pero veo que esta mas perdido que mejor dicho...

osea que la fecha que dijito se guarda en la base de datos como texto... veo que el error esta al traermela

pero ocurre algo curioso cuando en el campo de insertar fecha de vencimiento en la forma de guardar medicamnto coloco el datetimepicker y coloco el dia reviso la tabla de access y en el campo fecha guarda la fecha que le indico acompañado de una hora ejemplo

07/09/2001 8:36pm

siempre la misma hora

Casimiro Notevi
18-09-2011, 01:17:08
Sí, puedes adjuntar, cuando escribes un mensaje, mira un poco más abajo, ahí verás la opción para subir un archivo.

Caral
18-09-2011, 01:17:09
Hola
De mi parte, para tu tutor...................
Si un tutor te dice que pongas en una BD la fecha en formato texto, cambia de tutor, corre, pero corre fuertemente.
Como dice Melqueades, Corramos hacia la derecha:D:D
Saludos

Casimiro Notevi
18-09-2011, 01:24:52
Recuerdo que los archivos DBF guardaban las fechas en formato texto,

Mi admirado Wayne Ratliff:

El creador original de dBase fue Wayne Ratliff (http://es.wikipedia.org/w/index.php?title=Wayne_Ratliff&action=edit&redlink=1) [3] (http://www.foxprohistory.org/interview_wayne_ratliff.htm). En 1978 (http://es.wikipedia.org/wiki/1978), durante su estancia en el Jet Propulsion Laboratory (http://es.wikipedia.org/wiki/Jet_Propulsion_Laboratory) (Laboratorio de Propulsión a Chorro) Ratliff escribió un programa de base de datos en ensamblador (http://es.wikipedia.org/wiki/Ensamblador) para ordenadores con sistema operativo (http://es.wikipedia.org/wiki/Sistema_operativo) CP/M (http://es.wikipedia.org/wiki/CP/M) para ayudar con las apuestas de fútbol en la oficina. Lo denominó Vulcan en referencia al personaje Mr. Spock (http://es.wikipedia.org/wiki/Mr._Spock) de Star Trek (http://es.wikipedia.org/wiki/Star_Trek). Se basó en el JPLDIS (http://es.wikipedia.org/w/index.php?title=JPLDIS&action=edit&redlink=1) (Jet Propulsion Laboratory Display Information System) desarrollado por Jeb Long (http://es.wikipedia.org/w/index.php?title=Jeb_Long&action=edit&redlink=1). Más tarde lo usó para preparar sus impuestos y decidió que tenía un potencial comercial.

luisraad
18-09-2011, 01:27:13
aqui amigos

Caral
18-09-2011, 01:28:16
Hola
Paciencia, se te quedo el archivo en casa....:D
Saludos

luisraad
18-09-2011, 01:34:20
no lo puedo postear y q pesa mucho esperennn yo lo comprimo mas

Caral
18-09-2011, 01:34:55
Hola
´Quitale el EXE.
Saludos

Casimiro Notevi
18-09-2011, 01:35:05
Pero no pongas el exe

Casimiro Notevi
18-09-2011, 01:37:07
Bueno, amigos, me voy a leer y dormir, que vaya bien :)

Caral
18-09-2011, 01:39:19
Hola
Cuidate amigo.
Me alegro de verte.
Saludos
PD: Yo esperare un momento a ver si puedo ver esto.

luisraad
18-09-2011, 01:44:56
casimiro no me tiene pasienciia jijijij jijijiji jijijiji mira aki esa caral

luisraad
18-09-2011, 01:45:47
¬¬ no me critiken soy novato

Caral
18-09-2011, 01:46:54
Hola
Si no te critico no aprendes, eso quieres ?.
Saludos

luisraad
18-09-2011, 01:50:36
:):):):):):eek::p estoy jugandoooooo ijijijijijij :D:D:D he aprendido mucho hoy

Caral
18-09-2011, 01:54:27
Hola
Siempre me pasa lo mismo.
Me pasais los programas con la conexion open y no los puedo abrir.
Hazme un favor:
1-Elimina el que pusiste.
2-Coloca la carpeta que tiene el programa y la BD en el directorio C/:
3-Otra vez ponla en un zip y subelo.
4-Dime exactamente en que direccion lo pusiste.
A ver si lo puedo abrir.
Saludos

Caral
18-09-2011, 01:57:07
Hola
Espera, ya lo voy a abrir.
Saludos

luisraad
18-09-2011, 01:59:38
espera esta esta en C:/FECHA
cuando te refieres a conexion open te refieres a desactivar el adoconection bueno ya lo posteo

Caral
18-09-2011, 02:01:56
Hola
Ya esta abierto.
No enviaste el form2, me parece que no esta completo el programa por que no esta el codigo de busqueda.
Si no envias todo es dificil ayudar.
Saludos

luisraad
18-09-2011, 02:05:43
no se borrar el primero :eek:

Caral
18-09-2011, 02:11:41
Hola
Bueno, sigo sin tener el form2.
Que es lo que necesitas con exactitud ?.
1-
2-
etc...
Saludos

luisraad
18-09-2011, 02:15:01
no puede ser, aca esta todo completo.revisa el ultimo q te mande.

Caral
18-09-2011, 02:18:34
Hola
No importa
Veo que tienes:
1- Varios edit que incluyen los productos.
2- Un edit que es para filtrar por codigo, si esta vencido o no.
Que necesitas.
La verdad, esta algo desordenado.
Saludos

Caral
18-09-2011, 02:31:58
Hola
Quieres que lo haga completo otra vez ?.
Quieres que te indique lo que me parece que tendrias que cambiar ?.
Es que la verdad esta apenas hecho, se puede hacer de nuevo sin problemas.
Empezando por:
1-La conexion del adoconnetcion se tendria que hacer por codigo, asi se evitaria tener que poner el programa en una carpeta determinada.
2- Se tendra que hacer un datamodule, para manejar mejor la conexion.
3- Se tendria que hacer un form por cada uno de los conceptos que quieres hacer, insertar, buscar etc.
Por eso digo: Que quieres hacer ?.
Solo digo una cosa; Si lo hago tu tutor creera que es tuyo ?
Saludos

luisraad
18-09-2011, 02:38:47
haber caral... me interesa mucho que me expliques esa parte bueno mira eso que te mande hace lo siguiente segun creo:

1 guarda el codigo del medicamento
2 guarda el nombre del medicamento
3 ingresa la fecha de caducidad
4 en el db grid se lstaran los productos a vencer

lo que quiero es que en ese dbgrid se muetren los prodcutos que se van a vencer indicandole el numero de dias en un edit o simplemente traerme todos los productos que les faten 20 o menos dias para vencer....

ovbio que este es una plantilla que se le debe agregar a un programa general que te indico que esta hecho malllll!!! pero solo me importa esta consulta para mostrarla el lunes por eso hago esta form1 sensilla..

gracias saludos

Caral
18-09-2011, 02:42:00
Hola
Bien, dame un minuto.
Saludos

Caral
18-09-2011, 02:57:23
Hola
Bien tenemos un datetimepicker.
Tenemos un edit
Tenemos un dbgrid.
El datetimePicker da la fecha, el edit indica cuantos se han vencido, osea, el edit indicara una fecha menor.
Se presiona el boton y lo muestra, es asi o no?
Saludos

Caral
18-09-2011, 03:04:53
Hola
A ver asi, revisa el programa y me dices.
Saludos

luisraad
18-09-2011, 03:36:01
listo no hay problema, espero no te quite demasiado tiempo...

saludos

luisraad
18-09-2011, 04:03:11
Ya lo compile me dio un error la parte del tatetimepicker pero ya se soluciono, algo de que no es valido algo de integer, bueno segun lo que entiendo de aqui es que verifico por el codigo que medicamento expira cuando le digito el codigo. Bueno seria genial si en vez de ingresar el codigo del medicamento mejor le ponemos los dias antes de su vencimiento o sea que en el edit donde coloco el codigo mejor sean los dias ejemplo

listeme los productos que se vencen dentro de X dias y el los muestra en el DBGRid

entonces partimos de que tengo un error enorme en el ingreso de la fecha de vencimiento del producto porque en vez de tener un datetimepicker tengo es un edit, y el campo en la BD es tipo texto, no quiero confundirte pero en verdad seria bueno listar los medicamentos digitando los dias y que los muestre segun lo que el usuario le indique... entonces puedes con toda libetad quitar cualquier boton o edit qe creas que no va.. yo pretendo aprender tu metodo de manera menos complejo a la que me enseña el tutor de paso te doy puntos

luisraad
18-09-2011, 04:05:38
tampoco pretendo que me lo hagas, simplemente es un codigo base que me servira de referencia y asi los demas que vean este foro tambien aprendan a hacerlo de esta manera, perdon tanta molestia :D ero soy novato ((bien novato))

Caral
18-09-2011, 04:14:53
Hola
No entiendo lo que quieres hacer
Saludos

Caral
18-09-2011, 04:21:13
Hola
El programa tiene un datetimepicker que contiene la fecha de hoy.
Tiene un edit que sirve para buscar por codigo O por fecha.
Tiene dos botones.
1- busca por fecha
2- Busca por codigo
Siempre con el mismo edit.
Ejemplo:
Si pones el numero 1 y presionas el boton (buscar segun edit) te mostrara los productos que se vencieron en esa fecha.
Revisa bien el codigo, es muy sencillo.
Saludos

luisraad
18-09-2011, 04:26:38
ahhhhhhhhhhhhhh ya ok bueno amigo cuando selecciono el dia 15 del datetimepicker me arroja el siguiente error ((posteo la imagen para que veas mas o menos)) cuando doy clic para buscar segun edit el otro no da error

saludos

Caral
18-09-2011, 04:33:21
Hola
Voy a tratar de explicarme, ya estoy algo cansado, es la hora, disculpa.
El programa tiene un DateTimePicker que muestra una fecha.
Tiene un edit y un boton.
Si se pone, por ejemplo el numero 1 en el edit y se presiona el boton buscar segun edit, mostrara los productos que se vencieron de la fecha del datetimepicker 1 dia menos, osea, si hoy es 9/17/2011 y pusiste el numero 1, buscara en la fecha 9/16/2011.
Este mismo edit sirve para buscar por codigo, solo que presionaras el boton verificar codigo.
Espero lo entiendas amigo.
Saludos

luisraad
18-09-2011, 04:35:05
ma imagen es muy pesada te digo lo del mensaje de errror:
Econverter error whit message ''is not valid a integer value'' process sopped

Caral
18-09-2011, 04:37:14
Hola
El error lo dice todo.
No es un valor integer, por que?, muy simple, NO estas poniendo ningun dato en el EDIT.
Revisa mi post anterior, se explica bien.
Saludos

Caral
18-09-2011, 04:45:27
Hola
Hay muchas maneras de hacer lo que quieres, la verdad es que es tan sencillo que estoy seguro que lo vas a entender muy pronto.
Por hoy ya estoy cansado, si tienes algo mas mañana lo veo.
Saludos

luisraad
18-09-2011, 04:57:46
listo de todas maneras gracias

un saludo desde colombia!!

Caral
18-09-2011, 15:06:39
Hola
Aquí te dejo otro ejemplo.
Corre el programa y presiona el botón Buscar.
Te dará varias opciones, escoge la que quieras.
Buscar Medicamentos Vencidos (por días).
Buscar Medicamentos POR vencer (por días).
Buscar Por código de medicamento.
Todo con el mismo edit1.
Creo que esta bien explicado.
Saludos

Casimiro Notevi
18-09-2011, 16:26:48
Hola
Aquí te dejo otro ejemplo.
Corre el programa y presiona el botón Buscar.
Te dará varias opciones, escoge la que quieras.
Buscar Medicamentos Vencidos (por días).
Buscar Medicamentos POR vencer (por días).
Buscar Por código de medicamento.
Todo con el mismo edit1.
Creo que esta bien explicado.
Saludos

No se puede pedir más :)

luisraad
18-09-2011, 20:33:29
buenas tardes muchacho caral como estas?, bueno agradezco muchoo la ayuda proporcionada... en verdad aclaré muchisimas dudas que tenia..

tengo otra consulta que hacerles. no se si deba abrir otro hilo o seguimos aqui!.

el caso es que en la misma forma de donde estamos trabajando lo de las fechas, tengo un codigo que utilizo para insertar o mejor dicho guardar productos en la tabla MEDICAMENTOS...


var
c:string;
begin
if not adotable1.locate('COD',c,[])then
ADOTable1.Open;
begin
if (LabeledEdit2.text <> '') then
begin
adotable1.Insert;
ADOTable1.FieldByName('COD').AsString:=(LabeledEdit1.Text);
ADOTable1.FieldByName('NOMBRE').AsString:=(LabeledEdit2.Text);
ADOTable1.FieldByName('F_CADUCIDAD').AsDateTime:=strtodate(LabeledEdit3.text);
ADOTable1.Post;
ADOTable1.Close;
Application.MessageBox('Todos Los Datos Han Sido Almacenados Correctamente','FarmaSoft',MB_OK);
LabeledEdit1.clear;
LabeledEdit2.clear;
LabeledEdit3.clear;
LabeledEdit1.setfocus;
end;
end;
end;


el caso es que me guarda los productos pero al intentar insertar otro me da un error que se refiere a que la tabla no esta en modo insert, y otras veces dice que el Table esta abierto process stopped etc...

segun lo que logro entender es que la tabla debe ser cerrada cuando termino de insertar el primer producto luego debe abrirse de nuevo para insertar otro producto y asi sucesivamente..
spero me hayan entendido ((revisen el codigo que acabo de postear haber si le falta algo))

saludos

Caral
18-09-2011, 20:37:35
Hola
Segun lo que veo:
Haces una localizacion del codgo, si no esta, osea, si no es repetido entonces abre la tabla he inserta los datos.
Es asi?.
Saludos

Casimiro Notevi
18-09-2011, 20:45:54
Por favor, preguntas distintas en hilos distintos ;)
Y estaría bien saber qué resultados has obtenidos con la ayuda de Caral, si ya te funciona, si lo has aclarado, etc.

luisraad
18-09-2011, 20:50:08
supuestamente si asi debe ser....

el si no localiza el codigo debe guardar todos los otros campos ((creo que ese if not locate)) no debe ir alli, la idea es que quiero que guarde los productos y posteriormente permita guardar mas de manera indeterminada, pero asi como lo diseño yo según mi tutor esta bien pero se que no porque este no deberia dar error, caral si te fijas en la aplicacion que postie ayer te vas a dar cuenta que al insertar un nuevo medicamento en donde dice inserte cod, igrese nombre, ingrese fecha de caducidad, cuando presionas ingresar dice "todos los datos han sido almacenados", pero al dar clic en aceptar salta el error y no guarda... :mad: es solo aprender pero se que lograre entender ese codigo:)

Caral
18-09-2011, 20:58:29
Hola
Si te lo hago no aprendes.
Usa la lógica:
1- Para guardar datos se necesita que la tabla este abierta (correcto)?.
2- Para ver si existe algún dato o si es igual también se necesita que la tabla este abierta (correcto)?.
3- Para guardar (con un table) se hace un post con la tabla abierta (correcto) ?.
Es necesario cerrar la tabla en algún momento de estos tres puntos ??????????????.
Necesitas cerrar la Tabla :confused:
Saludos

luisraad
18-09-2011, 21:01:30
haber moderador si pregunto eso es porque en el manejo de la fecha de la aplicacion que le made a caral ayer esta lo que pregunto hoy pero no hay problema yo abro otro hilo... por eso no hay problema soy novato no entiendo casi el manejo delos foros... si tan solo hubiese una guia yo no cometiera errores

Caral
18-09-2011, 21:03:03
Hola
Aqui (http://www.clubdelphi.com/foros/guiaestilo.php)
Saludos

Casimiro Notevi
18-09-2011, 21:08:16
haber moderador si pregunto eso es porque en el manejo de la fecha de la aplicacion que le made a caral ayer esta lo que pregunto hoy pero no hay problema yo abro otro hilo... por eso no hay problema soy novato no entiendo casi el manejo delos foros... si tan solo hubiese una guia yo no cometiera errores

Hola
Aqui (http://www.clubdelphi.com/foros/guiaestilo.php)
Saludos

¿Si hubiese una guía? :confused::eek:, indicártelo, es lo primero que hice al ver tu mensaje en un hilo cualquiera donde pusiste tu pregunta la primera vez.
Y al principio de este hilo volví a recordártelo ;););)

Caral
18-09-2011, 21:12:20
Hola
Pero ya que estamos en este no me hagáis ir a otro hilo.
Ya coloque el sofá, tengo la mesita de la tele, me traje un bocata, venga, que ya estoy cómodo......:D:D:cool:;)
Saludos

luisraad
18-09-2011, 21:56:21
jajajajajaj caral

mira quedo asi y ya no me da error...


procedure TForm1.Button4Click(Sender: TObject);
var
c:string;
begin
if not adotable1.locate('COD',c,[])then
ADOTable1.Open;
begin
if (LabeledEdit2.text <> '') then
begin
adotable1.Insert;
ADOTable1.FieldByName('COD').AsString:=(LabeledEdit1.Text);
ADOTable1.FieldByName('NOMBRE').AsString:=(LabeledEdit2.Text);
ADOTable1.FieldByName('F_CADUCIDAD').AsDateTime:=strtodate(LabeledEdit3.text);
ADOTable1.Post;
Application.MessageBox('Todos Los Datos Han Sido Almacenados Correctamente','FarmaSoft',MB_OK);
LabeledEdit1.clear;
LabeledEdit2.clear;
LabeledEdit3.clear;
LabeledEdit1.setfocus;
end;
end;
end;


gracias caral :D:D;)

Caral
18-09-2011, 22:00:11
Hola
Que bien, me alegro.
Saludos

Neftali [Germán.Estévez]
19-09-2011, 10:22:25
Hola Luisraad, he movido tu pregunta aquí.
Por favor no mezcles diferentes temas. Revisa la Guia de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).

Casimiro Notevi
19-09-2011, 10:35:23
¿Estás de broma amigo?, si en este hilo hasta te han hecho el programa :confused:
Lee la guía de estilo, y si la has leído, ponla en práctica. Gracias.
Voy a unir este tema al otro, es el mismo.

Casimiro Notevi
19-09-2011, 10:45:21
Acabo de ver el mensaje de Neftalí, no sé dónde habías puesto el mensaje, ya me tienes confundido luisraad.
Si todavía no lo has comprendido, entonces simplemente sigue preguntando, hasta que lo entiendas.

Vaya, ahora veo que alguien ha borrado la pregunta :s

alej.villa
24-10-2011, 16:05:51
La conexion del adoconnetcion se tendria que hacer por codigo, asi se evitaria tener que poner el programa en una carpeta determinada.


Hola Caral la verdad es que me interesa saber como puedo hacer eso que tu propones en ese texto.
seguire investigando a ver que consigo ;)

Delphius
25-10-2011, 06:29:26
Busca sobre archivos .ini ;)
Y revisa el tutorial de la autoría de Caral que expone justamente ese ejemplo: Utiliza un archivo ini para leer los datos y generar la cadena de conexión para conectar a la base de datos.

Its Simple.

Saludos,

Casimiro Notevi
11-04-2013, 23:33:40
..

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)