PDA

Ver la Versión Completa : Ayuda con un insert.....


cheoac
10-07-2008, 16:15:49
Hola soy nuevo en el foro y tambien en delphi....tengo un problema que no se como remediarlo......tengo un formulario donde inserto datos.....cuando le doy al boton de insertar inserta los datos (me doy cuenta por o eo en la base de datos)...pero cuando cierro el formulario y abro otro dodne tengo un grid no aparencen los datos.......aparecen hasta que cierro toda la aplicacion y la vuelvo a abrir...este es mi codigo.....

query.Close;
query.SQL.Clear;
query.SQL.Text:='insert into candidatos(can_nom,can_apell,can_dir,can_tel,can_fecha,can_edad,can_mail,can_matricula,can_status,ca n_sexo,can_reg,can_par) values (:nom,:apell,:dir,:tel,:fecha,:edad,:mail,:matricula,:status,:sexo,:reg,:par)';
query.Params.ParamByName('nom').Value:=edit1.Text;
query.Params.ParamByName('apell').Value:=edit2.Text;
query.Params.ParamByName('dir').Value:=edit3.Text;
query.Params.ParamByName('tel').Value:=edit4.Text;
query.Params.ParamByName('fecha').Value:=edit5.Text;
query.Params.ParamByName('edad').Value:=edit6.Text;
query.Params.ParamByName('mail').Value:=edit7.Text;
query.Params.ParamByName('matricula').Value:=edit8.Text;
query.Params.ParamByName('status').Value:=combobox1.Text;
query.Params.ParamByName('sexo').Value:=rad1;
query.Params.ParamByName('reg').Value:=combobox2.Text;
query.Params.ParamByName('par').Value:=combobox3.Text;
query.ExecSQL;

juanlaplata
10-07-2008, 16:27:10
Al abrir el formulario verifica el dataset asociado al grid, hacer un refresh si esta relacionado directamente con una tabla, o close-open si esta relacionado con una consulta o query. Pues si mirando la base, los datos estan , no queda alternativa de por que no verlos. Suerte.

cheoac
10-07-2008, 17:04:21
gracias pero ya lo prove y tampoco....incluso el problema esta tambien cuando lleno un combo los datos se ven reflejados hasta que cierro y abro por completo la aplicacion.....

coso
10-07-2008, 18:12:15
hola cuando quieras ver los datos, usa el select


query1.Active := false;
query1.SQL.Text := 'select * from tabla';
query1.Active := true;


y deja la query activa (el datasource del dbgrid debe apuntar a un datasource el cual tenga por dataset query1)

PepeLolo
10-07-2008, 18:20:56
Te pasa porque tienes una transacción que se abre cuando arrancas la aplicación y se cierra cuando sales de esta.

Tienes que crear una transacción para el insert y commit para finalizarla. De ese modo podrás ver los datos en la rejilla.

un saludo.

cheoac
10-07-2008, 18:26:30
ya probe lo me estan diciendo pero no ams no jajaja.....o algo estay haciendo mal....en mi formulario del insert tengo un SQLconnection-> y un SQLquery...y en el boton tengo el codigo que antes menciones......en mi formulario dodne tengo el grid tengo un: SQLconnection->SQLquery->datasetprovider->clientdataset->datasource->dbgrid->dbnavigator......asi son mis relaciones.......pero les agradeceria si me explican lo delas transacines...mil gracias....

coso
10-07-2008, 18:32:54
SQLconnection->query1->datasource->dbgrid
SQLconnection->query1->datasource->dbnavigator

si para el insert usas otra query, entonces deberas hacer posteriormente otro 'select' en query1 para que refleje los cambios de la base de datos. Debes tener, claro esta, la query en active := true. Deberias, tambien, usar un datamodule para agrupar todo.



dm.query_dbgrid.Connection := dm.conexion;
dm.datasource_dbgrid.dataset := dm.query_dbgrid;
...
dbnavigator.datasource := dm.datasource_dbgrid;
dbgrid.datasource := dm.datasource_dbgrid;
...
dm.query_insert.Connection := dm.conexion;
...
boton1.Click (insertar)
dm.query_insert ... (etc)

boton2.Click (ver, si no lo quieres hacer automaticamente)
dm.query_dbgrid.Active := false;
dm.query_dbgrid.SQL.Text := 'select ...';
dm.query_dbgrid.Active := true;
...



mas o menos