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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 13
(VIH)Lestat Va por buen camino
Duda sobre el IBQuery e IBTABle cual usar??

Miren de pronto me surgio una duda ... me recomendaron utilizar IBQuerys en vez de IBTables... si utilizo los IBQuerys para almacenar informacion en vez de las IBtables es necesario utilizar un DATASOURCE??????

La verdad yo pienso que no... por que cuando se almacena informacion por sql INSERT INTO en ese momento estoy dando el nombre de la tabla en donde se almacenaran los datos.. cierto o falso???? es decir estoy guardando datos en la tabla de manera manual....

Si utilizo los querys para almacenar estos se ejecutan por medio de la sentencia EXECSQL verdad??? y me dijeron que luego se cierran estos y despues se abren de nuevo... es cierto????
Responder Con Cita
  #2  
Antiguo 25-06-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Registrado
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 17
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por (VIH)Lestat
Miren de pronto me surgio una duda ... me recomendaron utilizar IBQuerys en vez de IBTables... si utilizo los IBQuerys para almacenar informacion en vez de las IBtables es necesario utilizar un DATASOURCE??????
No es necesario para realizar esta operacion, tampoco para el IBTables. El Datasource se utiliza para mostrar el contenido del dataset en un componente visual(DBGRID o DBEDIT).
Cita:
Si utilizo los querys para almacenar estos se ejecutan por medio de la sentencia EXECSQL verdad???
Si
Clausuras como Insert, Update, Delete se utiliza ExecSql, para el Select se usa Open o Ibquery.Active=True
Cita:
y me dijeron que luego se cierran estos y despues se abren de nuevo... es cierto????
no entiendo??
Responder Con Cita
  #3  
Antiguo 26-06-2005
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 15
Mick Va por buen camino
Cita:
Empezado por (VIH)Lestat
Miren de pronto me surgio una duda ... me recomendaron utilizar IBQuerys en vez de IBTables... si utilizo los IBQuerys para almacenar informacion en vez de las IBtables es necesario utilizar un DATASOURCE??????

La verdad yo pienso que no... por que cuando se almacena informacion por sql INSERT INTO en ese momento estoy dando el nombre de la tabla en donde se almacenaran los datos.. cierto o falso???? es decir estoy guardando datos en la tabla de manera manual....
Si vas a añadir y modificar datos manualemente con la sentencia INSERT o UPDATE, ni siquiera es conveniente utilizar IBQuerys, lo absolutamente aconsejable en ese caso es utilizar la clase TIBSQL.
Una TIBQuery es una clase derivada de TDataset, porque esta pensada para poder enlazar con los controles visuales mediante un datasource, y poder ver asi los datos en pantalla. Esto hace que sea un objeto mucho mas complejo y lento en ejecucion. Si tu no vas a enlazar nada a esa query, y simplemente quieres ejecutar comandos, para eso esta pensado el objeto TIBSQL, que es mucho mas sencillo lo que implica que consume menos memoria y su codigo se ejecuta mas rapido.

Saludos
Responder Con Cita
  #4  
Antiguo 26-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 13
(VIH)Lestat Va por buen camino
pero como se utilizan los TIBSQL??? de la misma manera que IBSQL??? ...
pero tengo otra duda o mas bien un error....

EStoy introduciendo datos a las tablas por medio de IBQuerys.. estos solo estan enlazados a la base de datos... y en su propiedad Datasource lo tengo en blanco.....

pero utilizo unos parametros para introducir cierta informacion... estos parametros se los paso por medio de variables que almacenan informacion de los edits de mi formulario.. pero me marca un error que dice que un campo no esta guardando informacion y este campo es llave primaria y por lo tanto no se puede ejecutar ni guardar informacion en las tablas
Responder Con Cita
  #5  
Antiguo 26-06-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Registrado
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 17
vtdeleon Va por buen camino
Saludo

Pon el error exactamenete como te lo presenta y/o mustranos el codigo que utilizas
IBSQL es una declaracion del tipo TIbSql
Código Delphi [-]
Var
  IbSql:TIBSql;
  IBsql1:TIBSql;
  IBSql2:TIBSq;
 begin
 .....
 end;
Responder Con Cita
  #6  
Antiguo 26-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 13
(VIH)Lestat Va por buen camino
este es el error que me muestra:
Código:
un mensaje de error que esta en ingles y lo que me dice es que el campo 'Field 'DNI_ALUMNO' must be have a value' o sea que el campo debe tener un valor
`pero ese valor se lo estoy dando por medio del query y su parametro ... checalo.. este es el codigo del boton "guardar de mi formulario"

Código:
procedure TIngresar_alum.BitBtn3Click(Sender: TObject);
 
 
 var dni_a:string;
 	apellidopa:string;
 	apellidoma:string;
 	nombre:string;
 	sex:string;
 	dir:string;
 	local:string;
 	ciud:string;
 	tele:string;
 	fecha_ing:TDateTime;
 	statu:string;
 	imagen:string;
 	edoc:string;
 	carrera:string;
 	sem:integer;
 	cert:integer;
 	fot:integer;
 	act:integer;
 	cur:integer;
 
 
 
 begin
 	   //Se almacena los datos de las cajas de texto en las variables
 	   //para evitar perdidas de informacion
 
  dni_a:=matricula.Text;
  apellidopa:=apaterno.Text;
  apellidoma:=amaterno.Text;
  nombre:=nombres.Text;
  sex:=sexo.Text;
  dir:=direccion.Text;
  local:=localidad.Text;
  ciud:=municipio.Text;
  tele:=telefono.Text;
  edoc:=edocivil.Text;
  carrera:=DBLcarrera.KeyValue;
  fecha_ing:=strtodate(fecha.Text);
  statu:=status.Text;
  imagen:=DLgpicture.FileName;
  sem:=strtoint(semestre.Text);
  cert:=strtoint(certificado.ValueChecked);
  act:=strtoint(acta.ValueChecked);
  fot:=strtoint(fotos.ValueChecked);
  cur:=strtoint(curp.ValueChecked);
 
 
 		//Se insertan los valores en las tablas
 
 
 		ModuloSID.IBQuery1.Params[0].AsString:=dni_a;
 		ModuloSID.IBQuery1.Params[1].AsString:=apellidopa;
 		ModuloSID.IBQuery1.Params[2].AsString:=apellidoma;
 		ModuloSID.IBQuery1.Params[3].AsString:=Nombre;
 		ModuloSID.IBQuery1.Params[4].AsString:=Sex;
 		ModuloSID.IBQuery1.Params[5].AsString:=Dir;
 		ModuloSID.IBQuery1.Params[6].AsString:=Local;
 		ModuloSID.IBQuery1.Params[7].AsString:=ciud;
 		ModuloSID.IBQuery1.Params[8].AsString:=Tele;
 		ModuloSID.IBQuery1.Params[9].AsDate:=fecha_ing;
 		ModuloSID.IBQuery1.Params[10].AsString:=statu;
 		MOduloSID.IBQuery1.Params[11].AsString:=edoc;
 		ModuloSID.IBQuery1.Params[12].AsBlob:=imagen;
 
 		//Se ejecuta el Query 1 para almacenar datos
 
 
 		ModuloSID.IBQuery1.ExecSQL;
 
 
 		ModuloSID.IBQuery2.Params[0].AsString:=dni_a;
 		ModuloSID.IBQuery2.Params[1].AsString:=carrera;
 
 		//Se ejecuta el Query 2 para almacenar datos
 
 
 		ModuloSID.IBQuery2.ExecSQL;
 
 
 		ModuloSID.IBQuery3.Params[0].AsString:=dni_a;
 		ModuloSID.IBQuery3.Params[1].AsInteger:=sem;
 
 	   //SE ejecuta el Query 3 para almacenar los datos
 
 
 		ModuloSID.IBQuery3.ExecSQL;
 
 
 		ModuloSID.IBQuery4.Params[0].AsString:=dni_a;
 		ModuloSID.IBQuery4.Params[1].AsInteger:=cert;
 		ModuloSID.IBQuery4.Params[2].AsInteger:=act;
 		ModuloSID.IBQuery4.Params[3].AsInteger:=fot;
 		ModuloSID.IBQuery4.Params[4].AsInteger:=cur;
 
 		//Se ejecuta el Query 4 para almacenar datos
 
 		ModuloSid.IBQuery4.ExecSQL;
 
 		//Se abren y cierran las tablas para actualizar sus valores
 
 		ModuloSID.IBTalumnos.Close;
 		ModuloSID.IBTalumnos.Open;
 
 		ModuloSID.IBTsemestre.Close;
 		ModuloSID.IBTsemestre.Open;
 
 		MOduloSID.IBTalum_doc.Close;
 		ModuloSID.IBTalum_doc.Open;
 
 
 		ModuloSID.IBTalumno_carrera.Open;
 		ModuloSID.IBTalumno_carrera.Close;
 
 
 
 end;
Podrias decirme que esta malllll........... y me fastidie yyno consigo buscar el error... no se a que se debe ... ya llevo dias encontrando y cambiando de componentes pero nada....
Responder Con Cita
  #7  
Antiguo 26-06-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Registrado
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 17
vtdeleon Va por buen camino
Una vista rapido me dice que tu codigo esta bien. Puede ser que la sentecia sql (Insert) que utilizas tenga el error.

Chequealo! y/o muestralo para estar un poco mas claro
Responder Con Cita
  #8  
Antiguo 26-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 13
(VIH)Lestat Va por buen camino
este es el codigo sql del IBQuery1
Código:
insert into alumnos 
 values (:dni,:apater,:amatern,:nombre,:sex,:dir,:loc,:ciud,:tel,:fecha,:status,:image,:edoc);
este es el codigo del IBQuery 2

Código:
insert into alumnos_carrera
 values (:dni,:dnicarrera);
IBQuery 3:
Código:
insert into alumno_semestre
 values (:dni,:sem);
IBquery4
Código:
insert into alumnos_documentos
 values (:dni,:cert,:acta,:fots,:curp);
los valores que se introducen estan en orden segun la tabla y como vez es por medio de parametros... que opinas?????
Responder Con Cita
  #9  
Antiguo 26-06-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Registrado
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 17
vtdeleon Va por buen camino
No tengo muchos conocimientos de SQL, Pero llevandome de un manual:-P
Prueba esto:
Código SQL [-]
insert into alumnos (dni,apater,amatern,nombre,sex,dir,loc,ciud,tel,fecha,status,image,edoc)
  values (:dni,:apater,:amatern,:nombre,:sex,:dir,:loc,:ciud,:tel,:fecha,:status,:image,:edoc);
Nota:Suponiendo que los parametros tiene el mismo nombre que los campos
Suerte
Responder Con Cita
  #10  
Antiguo 26-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 13
(VIH)Lestat Va por buen camino
mira es que en sql si yo utilizo INSERT INTO alumnos ('en esta parte es donde van los campos de la tabla de alumnos pero si no los especifico los almacena en el orden en el que se encuentra la tabla) como ves no es necesario poner los nombres de los atributos ... pero en la clausula VALUES los tengo puesto en el orden en que esta la tabla o sea que no hay problema con el sql


ya no se que hacer....
Responder Con Cita
  #11  
Antiguo 26-06-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Registrado
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 17
vtdeleon Va por buen camino
Pero lo probaste como te dije? Chequea a ver si te funciona, no pierdes nada:P
Responder Con Cita
  #12  
Antiguo 26-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 13
(VIH)Lestat Va por buen camino
siiii y me sigue marcando lo mismo que el campo DNI_ALUMNO debe tener un valor pero no me marca de que tabla y pues cheque las variables declaradas y si me guardan el valor entonces se las paso por los parametros y deben de almacenar los valores pero no se que pasa..
Responder Con Cita
  #13  
Antiguo 26-06-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Registrado
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 17
vtdeleon Va por buen camino
Vamos a hacer esto por cada Query:
Código Delphi [-]
...
showmessage(dni_a);
ModuloSID.IBQuery1.Params[0].AsString:=dni_a;
showmessage(ModuloSID.IBQuery1.Params[0].AsString);
.....
Asi verificas si la variable y/o el param se le esta asignando algo
Responder Con Cita
  #14  
Antiguo 26-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 13
(VIH)Lestat Va por buen camino
oye para el MODULOSID.IBQuery1 si mostro los valores tal y como los tienen las variables, guardo el dni del alumno ... pero en el query2 ya no almacena el dni del alumno pero la variable aparece que si lo tiene... pero por que paso esto ??? a que se debe... me puedes explicar???
Responder Con Cita
  #15  
Antiguo 26-06-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Registrado
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 17
vtdeleon Va por buen camino
A qeu se debe? Ni la menor idea :-/
Sigamos probando, tarde o temprano llegaremos al Ki del asunto

En el query2, en vez de utilizar la variable para asignarle el string, pon una cadena String directamente 'algo' o matricula.Text y chequea si el param lo acepta
Responder Con Cita
  #16  
Antiguo 26-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 13
(VIH)Lestat Va por buen camino
no lo acepta... y ya intente jalar el dato desde esta para el query 2 instruccion
Código:
IBTalumnos.FieldByName('dni').AsString
pero todavia no ha guardado el valor en la tabla.... y que otra cosa me puedes sugerir para poder solucionarlo...
Responder Con Cita
  #17  
Antiguo 26-06-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Registrado
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 17
vtdeleon Va por buen camino
Pon un boton y un Nuevo Query en el formulario, llamemoslo IBPrueba.
Con la misma sentencia
Código SQL [-]
insert into alumnos_carrera
 values (:dni,:dnicarrera);
Código Delphi [-]
Procedure OnclickBoton(..);
begin
  ibprueba.parambyname('dni').asstring:='0001';//o lo que sea
  showmessage( ibprueba.parambyname('dni').asstring);
  ibprueba.parambyname('dnicarrera').asstring:='PLATANERO';//:-p
  ibprueba.execsql;
end;
Suerte
Responder Con Cita
  #18  
Antiguo 26-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 13
(VIH)Lestat Va por buen camino
Busque el Meoyo del asunto compadre... jajajaajaa ya lo tengo logre resolver mi problema....

El codigo quedo de la siguiente manera:

Código:
//Se pasan los parametros a los Querys
 
 		ModuloSID.IBQuery1.Params[0].AsString:=dni_a;
 		ModuloSID.IBQuery1.Params[1].AsString:=apellidopa;
 		ModuloSID.IBQuery1.Params[2].AsString:=apellidoma;
 		ModuloSID.IBQuery1.Params[3].AsString:=Nombre;
 		ModuloSID.IBQuery1.Params[4].AsString:=Sex;
 		ModuloSID.IBQuery1.Params[5].AsString:=Dir;
 		ModuloSID.IBQuery1.Params[6].AsString:=Local;
 		ModuloSID.IBQuery1.Params[7].AsString:=ciud;
 		ModuloSID.IBQuery1.Params[8].AsString:=Tele;
 		ModuloSID.IBQuery1.Params[9].Value:=fecha_ing;
 		ModuloSID.IBQuery1.Params[10].AsString:=statu;
 		ModuloSID.IBQuery1.Params[11].AsBlob:=imagen;
 		MOduloSID.IBQuery1.Params[12].AsString:=edoc;
 
 
 		ModuloSID.IBQuery2.Params[0].AsString:=dni_a;
 		ModuloSID.IBQuery2.Params[1].AsString:=carrera;
 
 		ModuloSID.IBQuery3.Params[0].AsString:=dni_a;
 		ModuloSID.IBQuery3.Params[1].AsInteger:=sem;
 
 		ModuloSID.IBQuery4.Params[0].AsString:=dni_a;
 		ModuloSID.IBQuery4.Params[1].AsInteger:=cert;
 		ModuloSID.IBQuery4.Params[2].AsInteger:=act;
 		ModuloSID.IBQuery4.Params[3].AsInteger:=fot;
 		ModuloSID.IBQuery4.Params[4].AsInteger:=cur;
 
 		//Se ejecuta los Querys del 1 al 4 para almacenar datos
 
 		  ModuloSID.IBQuery1.ExecSQL;
 		  ModuloSID.IBQuery2.ExecSQL;
 		  ModuloSID.IBQuery3.ExecSQL;
 		  ModuloSid.IBQuery4.ExecSQL;
 
 	   //Se abren y cierran las tablas para actualizar sus valores
 
 		MOduloSID.IBTalum_doc.Close;
 		ModuloSID.IBTalum_doc.Open;
 
 		ModuloSID.IBTalumnos.Close;
 		ModuloSID.IBTalumnos.Open;
 
 		ModuloSID.IBTalumno_carrera.Open;
 		ModuloSID.IBTalumno_carrera.Close;
 
 		ModuloSID.IBTsemestre.Close;
 		ModuloSID.IBTsemestre.Open;
como pueden darse cuenta el valor de la dni del alumno no me lo almacenaba en las demas tablas porque primero se ejecutaba el QUery 1 y luego se cerraban y abrian las tablas para actualizar los datos,, y por eso ya no me dejaba pasarle de nuevo el parametro a los demas querys.. y como pueden estas sentencias las deje de ultimo para que todos los parametros se pasen correctamente....

jajajaaj un poco complicado ... pero no imposible... verdad???

GRax a todos por su ayuda.....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 22:18:34.


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