Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-07-2006
krilea krilea is offline
Miembro
 
Registrado: mar 2005
Posts: 16
Poder: 0
krilea Va por buen camino
Post, Crea o modifica?

Hola!
Tengo una dudilla que no se como resolverla. Estoy trabajando en delphi 7 con Access.
Cuando quiero ingresar un registro nuevo hago ADOQuery1.insert y cuando quiero modicarlo ADOQuery1.edit. Una vez termino para guardar los canvio hago ADOQuery.post.

El problema está en que cuando hago el post necesitaria saber si he heco el post de un insert o el post de un edit porque tengo que hacer comprovaciones distintas en cada uno de los casos.

Alguien sabe como puedo saberlo?

Muchas Gracias!!
Responder Con Cita
  #2  
Antiguo 17-07-2006
santi33a santi33a is offline
Miembro
 
Registrado: jun 2005
Posts: 208
Poder: 19
santi33a Va por buen camino
simplemente preguntas
Código Delphi [-]
 if ADOQuery1.state = dsInsert then begin
  // estoy insertando
  end
 else if ADOQuery1.state = dsEdit then begin
 // estoy editando
 end;

Normalmente esto se usa en el evento BeforePost del ADOQuery

Santiago
Responder Con Cita
  #3  
Antiguo 02-08-2006
Avatar de destrukthor
destrukthor destrukthor is offline
Miembro
 
Registrado: may 2006
Posts: 57
Poder: 19
destrukthor Va por buen camino
Error en dsInsert

Siguiendo el hilo me dice el error.

[Error] Compras.pas(417): Undeclared identifier: 'dsInsert'

y el codigo es simple.

Código Delphi [-]
 
 IF (Key=#13) THEN BEGIN
    IF DBGrid1.Fields[0].Value<>Null THEN Begin
      IF MD.tbMovCom.State = dsInsert THEN
        MD.tbMovCom.Post;
    End;
  END;

Es aqui donde se coloca y muestra el error.
¿Porque?
me faltara a algun unit??
Uso tablas paradox 7 y delphi 7.
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera.

Última edición por dec fecha: 02-08-2006 a las 09:17:34.
Responder Con Cita
  #4  
Antiguo 02-08-2006
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Cambia el igual por un IN

Código Delphi [-]
 if ADOQuery1.state in [dsInsert] then
  begin
  // estoy insertando
  end
 else if ADOQuery1.state in [dsEdit] then
 begin
 // estoy editando
 end;
Responder Con Cita
  #5  
Antiguo 02-08-2006
Avatar de destrukthor
destrukthor destrukthor is offline
Miembro
 
Registrado: may 2006
Posts: 57
Poder: 19
destrukthor Va por buen camino
Persiste ele Error

Sorry amigo, pero me sigue dando el mismo error.

[Error] Compras.pas(419): Undeclared identifier: 'dsInsert'

IF (Key=#13) THEN BEGIN
IF DBGrid1.Fields[0].Value<>Null THEN Begin
IF MD.tbMovCom.State IN dsInsert THEN
ShowMessage('Pasa a Modificar')
// MD.tbMovCom.Post;
End;
END;

Gracias ¿me puedes ayudar?
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera.
Responder Con Cita
  #6  
Antiguo 02-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por destrukthor
me faltara a algun unit??
Agrega la unidad DB.

// Saludos
Responder Con Cita
  #7  
Antiguo 02-08-2006
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Lee mi ejemplo.

El dsInsert debe estar entre corchetes [dsInsert]

Tambien puedes revisar la ayuda de State, es muy sencillo, solo hay que pulsar F1.

Saludos
Responder Con Cita
  #8  
Antiguo 02-08-2006
Avatar de destrukthor
destrukthor destrukthor is offline
Miembro
 
Registrado: may 2006
Posts: 57
Poder: 19
destrukthor Va por buen camino
Wink Gracias amigos

Resuelto el problema, me faltaba el [] y el unit DB.

Muchas gracias nuevamente.
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera.
Responder Con Cita
  #9  
Antiguo 02-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Para qué quieren el IN y los []? Bastaba incluir la unidad DB y la comparación que se tenía originalmente:

Código Delphi [-]
IF MD.tbMovCom.State = dsInsert THEN

// Saludos
Responder Con Cita
  #10  
Antiguo 02-08-2006
Avatar de destrukthor
destrukthor destrukthor is offline
Miembro
 
Registrado: may 2006
Posts: 57
Poder: 19
destrukthor Va por buen camino
Cool Si gracias.

ya lo verifique y el codigo inicial estaba bien tb solo faltaba el unit DB.
Gracias...
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera.
Responder Con Cita
  #11  
Antiguo 02-08-2006
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Cita:
¿Para qué quieren el IN y los []? Bastaba incluir la unidad DB y la comparación que se tenía originalmente:
Tienes razón.

Yo uso el IN, porque el tipo TDataSetState puede tener diferentes valores, y a veces me interesa que se realice una acción si se cumplen alguno de los valores. Usando el IN no tengo que hacer un OR.

Y si usas IN, el tipo a de ir entre corchetes, creo yo....

En este caso concreto no hacia falta el IN, y lo de la unit db no se me había ocurrido, ya que en mi caso, esa unit se añade automaticamente.
Responder Con Cita
  #12  
Antiguo 02-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Así es, State puede tener varios valores y cuando interesa saber si es uno de entre varios entonces IN es lo mejor. De hecho, cuando más lo he usado es justo para lo contrario: saber si el DataSet está en edición o inserción sin importar cuál exactamente:

Código Delphi [-]
if DataSet.State in [dsInsert, dsEdit] then

y coincido contigo pues es mucho más cómodo que usando OR.

Por cierto, en esa misma unidad DB se define la constante

Código Delphi [-]
const
  dsEditModes = [dsEdit, dsInsert, dsSetKey];

de manera que de hecho se puede poner

Código Delphi [-]
if DataSet.State in dsEditModes then

para saber si el DataSet se está editando.

// Saludos
Responder Con Cita
  #13  
Antiguo 02-08-2006
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Yo lo uso exactamente para los mismo, para saber cuando esta en modo edición.

Y no conocia dsEditModes, asi que otra cosa más que he aprendido hoy.
Responder Con Cita
  #14  
Antiguo 02-08-2006
Avatar de destrukthor
destrukthor destrukthor is offline
Miembro
 
Registrado: may 2006
Posts: 57
Poder: 19
destrukthor Va por buen camino
Wink aaa que genail

Gracias yo tambien he aprendido algomas y vastante mas.

Una pequeña consulta y para que me aconsejen, yo uso tablas paradox, y aqui he escuchado mucho hablar de SQL o MySql, lo que estoy usando (paradox), me servira para una red o es preferible aprender de inmediato MySql.
Recuerden q soy novato en Delphi.

Gracias por las Ayudas recibidas..
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera.
Responder Con Cita
  #15  
Antiguo 02-08-2006
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
La pregunta es tan amplia.......

Paradox en red funciona mal. Se que algunos diran que se puede hacer, pero en mi opinión funciona mal. Paradox no se diseñó para usarlo en red.

En cualquier caso, si utilizas paradox en red, tendrás que utilizar SQL, ya que con objetos TTable es una locura.

SQL es un estandar de lenguaje para acceder a bases de datos.
No es una base de datos en si misma, sino un conjunto de reglas comunes a todas (o casi todas) las bases de datos.

Asi que no tienes que aprender MySQL, sino SQL.

Luego tendrás que decidir que motor de base de datos es mejor para la aplicación que estes desarrollando.

Yo prefiero FireBird antes que MySql, pero es para gustos.

Y para terminar, cada motor de base de datos suele tener sus extensiones a la norma general de SQL, de modo que las sentencias SQL "basicas" son las mismas, pero cada GDB te permitirá ciertas funciones "extendidas".

Mi recomendación, por experiencia propia, cuanto antes migres TODO a SQL mejor, aunque el proyecto sea pequeño, nunca se sabe....
Responder Con Cita
  #16  
Antiguo 02-08-2006
Avatar de destrukthor
destrukthor destrukthor is offline
Miembro
 
Registrado: may 2006
Posts: 57
Poder: 19
destrukthor Va por buen camino
Smile Mil gracias...

Mil gracias por el consejo, terminare este pequeño proyecto de pruebas q estoy haciendo y me pondre en marcha a aprender SQL.
Gracias.. Amigo
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera.
Responder Con Cita
  #17  
Antiguo 02-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola, en mi opinión la gran limitante de paradox es la cantidad de usuarios y/o información que puede manejar. No obstante, prácticamente no he tenido problema alguno al usarlo en red. Pero además, sea o no en red, definitivamente paradox está hecho para ser usado con componentes Table. El SQL que maneja no es más que una emulación que trabaja muy lento. SQL es la mejor opción cuando se usa con motores que realmente son cliente-servidor. Con paradox la cosa es alrevés. Las componentes Table están diseñadas para trabajar con los índices que se establecen mientras que TQuery no usa esos índices y cualquier consulta SQL que no use índices es, la más de las veces, muy lenta.

Eso sí, el hecho de no ser cliente-servidor y de haber actualmente varias opciones libres que sí lo son (como las que menciona Sick boy), hace difícil entender que se siga optando por paradox, o access que para el caso es lo mismo.

Por otra parte, destrukthor, te recomiendo que esto último que preguntas lo hagas en otro hilo o busques en los foros porque nos estamos saliendo del tema original.

// Saludos
Responder Con Cita
  #18  
Antiguo 02-08-2006
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Yo ya sabia que hay gente trabajando con paradox en red y que les funciona bien!!!

pero
Cita:
Con paradox la cosa es alrevés. Las componentes Table están diseñadas para trabajar con los índices que se establecen mientras que TQuery no usa esos índices y cualquier consulta SQL que no use índices es, la más de las veces, muy lenta.
Esto si que no lo sabia, y puede ser el motivo por el que nunca consegui que funcionara como yo queria o esperaba, ya que el 90% de la aplicación usaba querys.

No coincido con lo de los indices y los querys, pero puedo estar equivocado.

Con lo que coincido es que ya no tiene mucho sentido usar paradox, y pasarte el dia reconstruyendo indices, reparando autoincrementales y liberando los lck.

Y es cierto que hay que abrir otro hilo, porque esto ya es otro tema.
Responder Con Cita
  #19  
Antiguo 02-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Sick boy
ya no tiene mucho sentido usar paradox, y pasarte el dia reconstruyendo indices, reparando autoincrementales y liberando los lck.
El punto es: normalmente yo no tengo que hacer esta tareas. Nunca. Las únicas veces en que he debido regenerar índices es cuando falla la energía eléctrica y la pc se apaga a la brava. Por ello es que para mi esa no es la razón para no usar paradox.

No obstante, como estamos de acuerdo en ya no usar paradox, pues mal haríamos discutiendo de algo que ninguno va a usar

// Saludos
Responder Con Cita
  #20  
Antiguo 02-08-2006
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Cita:
Nunca. Las únicas veces en que he debido regenerar índices es cuando falla la energía eléctrica y la pc se apaga a la brava
Nunca???
O cuando el windows se cuelga....
O cuando intenta enredar en la base de datos desde access...

Cuando el sistema esta vendido a muchos clientes, estos casos "raros" suceden casi a diario.
De hecho, hice una aplicación que detectaba estos cierres "bruscos" y reparaba de forma automatica, lo cual me quitaba muchos dolores de cabeza.

Pero, y cuando de vez en cuando desparecen datos??

Podriamos abrir otro hilo y poner a parir a Paradox, dBase y compañia, y compararlas con las bases de datos libres actuales (FB, MySQL, DB2, ...), que también tienen sus cositas.

Por mi parte, creo que este hilo ha sobrepasado el proposito inicial, no te parece??
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
IBDatase Insert Post Edit Post ariefez Firebird e Interbase 4 12-10-2005 01:53:04
RARISIMO mismo codigo cosas distintas no modifica campo TEXTO Patricio Conexión con bases de datos 1 10-08-2005 21:29:53
IBDataset no modifica istradlin Conexión con bases de datos 2 19-04-2005 23:44:22
No me inserta un registro nuevo, me modifica el anterior vhirginia Conexión con bases de datos 10 11-05-2004 13:04:38
No me crea la bd al instalar davgoncam Oracle 8 07-03-2004 14:31:26


La franja horaria es GMT +2. Ahora son las 18:25:15.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi