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 09-01-2008
sdiaz1983 sdiaz1983 is offline
Miembro
 
Registrado: sep 2007
Posts: 52
Poder: 17
sdiaz1983 Va por buen camino
Problema con añadir registro a base de datos

Buen dia a todos, antes que nada quiero que observen este codigo
Código Delphi [-]
procedure TFrmClientes.BtGuardarClick(Sender: TObject);
begin
TblCliente.Active:=True;
QryCliente.SQL.Text:='select * from cliente where Cedula=:P1 and Nombre=:P2 and Apellido=:P3 and Telefono=:P4 and Direccion=:P5';
QryCliente.Params[0].AsString:=EdtCedula.Text;
QryCliente.Params[1].AsString:=EdtNombre.Text;
QryCliente.Params[2].AsString:=EdtApellido.Text;
QryCliente.Params[3].AsString:=EdtTelefono.Text;
QryCliente.Params[4].AsString:=EdtDireccion.Text;
QryCliente.Active:=True;
if (QryCliente.RecordCount>0) then
ShowMessage('REGISTRO YA ESTA: '+IntToStr(QryCliente.RecordCount)+'')
else
ShowMessage('PAILAS');
QryCliente.AppendRecord([EdtCedula.Text]);
QryCliente.Active:=False;
TblCliente.Active:=False;
end;
end.

Lo que estoy tratando de hacer(inicialmente a manera de prueba) es que por ejemplo yo ingreso unos datos en un formulario, si me lo encuentra listo me muestra el mensaje Registro ya esta, eso ya funciona, el problema que tengo es listo ingreso los datos de un registro que no este en la base de datos me bota el mensaje pailas y lo que quiero a manera de prueba es que a manera de prueba me agregue lo que esta en ese Edt (EdtCedula) al la base de datos, segun la ayuda el metodo appenrecord me permite agregar registros al final de la base de datos, pero el erro que me bota dice mas o menos "QryCliente: No se puede modificar un Dataset de solo lectura"( es mas o menos mi traduccion ya que el mensaje en ingles no recuerdo pero se relaciona con esto), el problema es si con ese metodo me ahorro el usar la sentencia sql de insert (insert into .... values....), que tengo que corregir del codigo.

Mil Gracias por su ayuda.
Responder Con Cita
  #2  
Antiguo 09-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Antes de activar el query, poné esto:

Código Delphi [-]
  QryCliente.RequestLive := True;

hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 09-01-2008
sdiaz1983 sdiaz1983 is offline
Miembro
 
Registrado: sep 2007
Posts: 52
Poder: 17
sdiaz1983 Va por buen camino
Agradecimientos

Mil Gracias Por Su Ayuda Ya Me Funciono, uan pregunta el registro me lo esta agregando al principio de la tabla, queria preguntarle como hago oque propiedad tengo que hacer para que me lo agregue al final.

Gracias uan vez mas
Responder Con Cita
  #4  
Antiguo 09-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
En las bases de datos SQL no existe una secuencia en los registros de una tabla, en otras palabras no existe tal cosa como "primer registro" o "último registro" de una tabla, que son conceptos usuales en manejadores de archivos de escritorio.

Para que el servidor te entregue los registros en un orden particular, existe la clausula "order by", que podes añadir a tu sentencia SQL.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 09-01-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
O lo que es lo mismo, debes definir un índice para tu tabla que servirá para que tu motor te entregue los registros ordenados de una cierta manera por default. Puedes usar un campo autoincrementado para llevar un secuencia según el orden en que fueron ingresados los registros.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #6  
Antiguo 09-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por AzidRain Ver Mensaje
O lo que es lo mismo, debes definir un índice para tu tabla que servirá para que tu motor te entregue los registros ordenados de una cierta manera por default. Puedes usar un campo autoincrementado para llevar un secuencia según el orden en que fueron ingresados los registros.
Lo siento, pero no estoy de acuerdo con eso. Por mucho que definas un índice, si haces un simple:

Código SQL [-]
select *
  from tabla

El motor te devolverá los datos en un orden no definido.

Por el contrario, si lanzás un query con la clausula order by, aún cuando el motor no tenga índices en que apoyarse, te entregará los datos perfectamente ordenados.

El hecho de que existan o no índices, es un tema que tiene que ver con el desempeño de la base de datos, pero no con el ordenamiento de los resultados que devuelve un motor.

AzidRain, no es conveniente generalizar en este tema, pues mientras algún motor probablemente se base en un índice (por ejemplo, el de la llave primaria) para entregar datos ordenados, el estándar SQL no le impone la obligación de hacerlo, con lo que el comportamiento podría variar entre versiones, y definitivamente varía entre motores.

Dado que no estamos hablando de ningún motor en particular... es mejor hacer afirmaciones apegadas al estándar, y dejar que cada quien compruebe si su base de datos lo cumple o no.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 09-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

mmm tal vez AzidRain quiso referirse al indice de la llave (o clave) primaria de la tabla...

Por que siempre que haces un select * from Tabla, esta se ordena de acuerdo al campo sobre el cual está definida la llave primaria...


Saludos...

Edit:

Eso me pasa por leer de prisa xDDD

Puede que si sea diferente en distintos motores, pero al menos en los que he usado, si se cumple del que el orden predeterminado lo da la llave primaria...


Saludos de nuevo...
Responder Con Cita
  #8  
Antiguo 09-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por maeyanes Ver Mensaje
Puede que si sea diferente en distintos motores, pero al menos en los que he usado, si se cumple del que el orden predeterminado lo da la llave primaria...
mmm... ¿cuales son los que vos has usado?

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 09-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Pues principalmente Interbase/Firebird...

Y un tiempo usé MS SQL Server...

Aunque claro, no hay que descartar que sea la aplicación cliente quien ordene los resultados de ese modo cuando no existe la clausula order by...


Saludos (ordenados diría Al Gonzalez )
Responder Con Cita
  #10  
Antiguo 09-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por maeyanes Ver Mensaje
Pues principalmente Interbase/Firebird...

Y un tiempo usé MS SQL Server...

Aunque claro, no hay que descartar que sea la aplicación cliente quien ordene los resultados de ese modo cuando no existe la clausula order by...


Saludos (ordenados diría Al Gonzalez )
Puedo garantizar que ninguna de las versiones de Interbase o Firebird con las que he trabajado ordena de la manera que vos lo describís. Según recuerdo son:
  • Interbase 5.5
  • Interbase 6
  • Firebird 1 y 1.01
  • Firebird 1.5.x
  • Firebird 2.0.x

Puedo probarlo únicamente ahora en Firebird.



Como ves, el resultado no está ordenado por cliente. El hecho de que seleccione solamente los primeros 20 registros no afecta el ordenamiento. He hecho una consulta de la tabla completa y funciona tal como lo he dicho.

Ahora no tengo tiempo suficiente para probarlo con SQL Server... si lo tengo en un rato, ya postearé mis resultados.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 09-01-2008 a las 21:27:57. Razón: cambiar el link a la imagen
Responder Con Cita
  #11  
Antiguo 09-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Creo que el link de la imagen que pusiste está mal... veo una imagen muy pequeña (el tumbnail) y no puedo ver bien el resultado...

Y bueno, yo no uso el cliente de línea de comandos de Firebird, y como comenté arriba, puede que el cliente sea el que ordena los registros por medio de la clave primaria cuando no se especifica un order by...

Aquí un SS de una consulta desde EMS SQL Manager:

Screen Shot


Saludos...

Última edición por maeyanes fecha: 09-01-2008 a las 22:29:06.
Responder Con Cita
  #12  
Antiguo 09-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Bueno...

Haciendo una pueba desde ISQL Firebird 2.0...

Screen Shot

El campo clave e indexado es ID_RAMO y los datos están ordenados de acuerdo a ese campo...


Saludos...
Responder Con Cita
  #13  
Antiguo 09-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Haciendo una prueba con una tabla más grande, veo el comportamiento que indicas...

Y bueno, veo que he estado equivocado al respecto...


Saludos...
Responder Con Cita
  #14  
Antiguo 09-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
En firebird, eso mismo puede pasar también con una tabla pequeña. Sobre todo si sufre constantemente de borrados e inserciones.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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
Problema al insertar un registro en la base de datos mcalmanovici Conexión con bases de datos 2 30-08-2007 04:48:59
Insertar Un Registro En Base De Datos Con Boton ghato168 PHP 14 01-08-2007 20:10:28
Recorrer base de datos registro por registro Goyo SQL 3 06-09-2006 21:40:47
Problema al añadir registro joanajj SQL 5 02-05-2006 20:21:12
Mismo registro de la base de datos al crear Form gluglu Varios 2 28-09-2004 18:58:25


La franja horaria es GMT +2. Ahora son las 05:52:39.


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