PDA

Ver la Versión Completa : Ayuda con los DBGRIDS


drakkon
17-06-2007, 08:07:31
Que tal amigos, otra ves aqui necesitando de su yuda. Me encuentro trabado en mi proyecto. Voy a tratar de explicar mi problema.

Estoy trabajando en Delphi 6 y mi BD es de MySQL. Tengo en mi aplicación un form donde he puesto un DBGrid enlazado con un DataSource, mismo que comparte con un TQuery. En vez de utilizar un DBNavigator he creado yo mismo un panel de bitbtn's con los que puedo recorrer a traves de todos los registros de mi tabla, ademas de añadir un botón de INSERTAR, ELIMINAR Y GUARDAR. Cuando tengo registros en mi tabla ("Autorizadas"), no encuentro ningún problema a la hora de modificar algun registro o inclusive de eliminarlo. El problema radica a la hora de querer insertar uno nuevo en mi tabla a traves del DBGrid. Las columnas estan directamente relacionadas con los campos que necesito. Alguien podría ayudarme por favor, se lo agradeceré muchisimo.:confused:

Delfino
17-06-2007, 12:43:44
En vez de utilizar un DBNavigator he creado yo mismo un panel de bitbtn's
Podrias hacerlo con el componente TActionList (o TActionManager) y crear standard dataset actions, asi te ahorras escribir codigo,
El problema radica a la hora de querer insertar uno nuevo en mi tabla a traves del DBGrid
Si, pero hay q explicar cual esl problema, no solo donde radica, en este foro en concreto te puedo asegurar q hay muy pocos adivinos :confused:

drakkon
17-06-2007, 18:59:16
En mi DBGrid tengo 3 columnas (clave, nombre, relacion) que estan relacionadas directamente con los campos.

Intento poner este código en un BitBtn para guardar el nuevo registro que agregue en el DbGrid, y puedo hacer referencia a lo que haya escrito en la 1er. columna, pero no se cómo decirle que guarde lo que escribí en las demas columnas.


Query3.Close();
Query3.SQL.Clear();
Query3.SQL.Add('SELECT *FROM clientes1 WHERE clave_cli='+DbGrid1.SelectedField.Text+';');
Query3.OpenDatabase();
Query3.Open();
if Query3.Eof=false then begin
Application.MessageBox('Clave Duplicada','ERROR',MB_ICONERROR or MB_OK);
end;

else begin
Query3.Close();
Query3.SQL.Clear();
Query3.SQL.Add('INSERT INTO clientes1 (id_persona,nombre,relacion) VALUES (:iddpersona,:nombre,:relacion)');
Query3.ParamByName('iddpersona').AsString:=DbGrid1.SelectedField.Text;
Query3.ParamByName('nombre').AsString:= // es aqui donde no sé cómo hacer referencia a las demas columnas del Grid.
Query3.ParamByName('relacion').AsString:= // es aqui donde no sé cómo hacer referencia a las demas columnas del Grid.
Query3.ExecSQL;
end;


Es precisamente éste el problema que tengo. Espero me haya explicado mejor y puedas ayudarme por favor.

Saludos.:confused:

Lepe
17-06-2007, 19:31:18
Estas mezclando 2 conceptos y por eso no sale como quieres.

En un sql

- Si pones :id_Persona, delphi mira si hay un campo llamado de esa forma exacta, si lo hay, no puedes usar Parambyname para darle un valor, sino FieldByName.

- Sip pones :iddPersona, como no hay ningún campo que se llame así en la tabla, entonces, debes usar ParambyName para darle valores.

Yo suelo seguir una norma: Acceder a todos los campos con FieldByName o a todos los campos con ParamByname. La razón es muy simple, cuando vas a modificar el programa, ese pequeño detalle se te escapa y el programa no va como esperas.

Saludos

lgarcia
18-06-2007, 14:16:48
Hola:

Una variante que me parece que pudieras probar es utilizar un formulario para las tareas tanto de insertar como de modificar y no trabajar directamente en el DBGrid puesto que a veces el usuario sin darse cuenta modifica datos y luego no sabe el que tenia, yo en mi caso prefiero ponerle a la propiedad Option/dgEditing a Falso y cuando inserte o modifique con ese otro formulario ejecuto las Query correspondientes a esas 2 operaciones.

Saludos
Luis Garcia