PDA

Ver la Versión Completa : Duda con DBnavigator y bases de datos.


principiodual
15-09-2014, 20:32:55
Buenas tardes a todos, tengo una pequeña duda que ojala me pudieran orientar, de ante mano muchas gracias, sobretodo por la gran ayuda de mi problema anterior, he aprendido mucho en el poco tiempo que llevo en esta comunidad.

Mi problema es el siguiente, conecto un dbnavigator a un dbgrid, para trabajar el agregar, modificar y eliminar y todo bien, mientras la tabla con la que conecto el dbgrid tenga o traiga datos, pero si por ejemplo le aplico un Delete a la tabla y la limpio toda, al ir al aplicativo no me da la opción mediante el dbnavigator de llenar la tabla en el dbgrid, sino que todo viene vació(me refiero al dbgrid, logicamente ya que la tabla esta vacía), pero se me inhabilita el dbnavigator... ¿como pudiera hacer para que aunque el dbgrid no traiga ningún dato, solo porque la tabla esté vacía en la base de datos, aún así, funcione el db navigator y pueda añadir un primer registro desde el programa que hice y no recurrir a llenar un registro en la bd y despues si poder trabajar el resto llenado desde el programa?

Muchas gracias a todos.

Casimiro Notevi
15-09-2014, 20:47:31
Se supone que tienes el botón 'insertar' en el dbnavigator, ¿no?

principiodual
15-09-2014, 21:41:07
Se supone que tienes el botón 'insertar' en el dbnavigator, ¿no?

si amigo, la cuestion es que el bdnavigator aparece como desactivado cuando la tabla a la que hace conexión el dbgrid está vacía y el dbgrid viene vacio, pero mientras haya por lo menos un dato en la tabla y el dbgrid lo traiga, la barra dbnavigator estará activada y podrá insertar, eliminar y todo lo demás.

Casimiro Notevi
15-09-2014, 22:43:51
¿Y el dataset (la tabla) está activo/abierto?

principiodual
15-09-2014, 23:05:06
¿Y el dataset (la tabla) está activo/abierto?

si amigo, así tengo el código donde trabajo el dbnavigator.


procedure TForm3.cargaDBGRID;
begin
StrSQL:='';

StrSQL:='SELECT * FROM GEINVZLA_TB_CUENTAS;';

Cn002 := TADOConnection.Create(nil);
adotComponents := TADOQuery.Create(nil);
//Conexion a la Base de datos
Conectado2:=Open_DB (Cn002 , 5 , ServerDB, NameDB2, '', PasswordDB, '' );


//si hay conexion continue con el proceso
if Conectado2 then
Begin

//Se Abre el DataSet de la factura
Conectado2:= Open_ADO_Qry(Cn002,adotComponents,StrSQL,false);

// Verifica si se Abrio el DataSet

adotComponents.Open;
adotComponents.Edit;
adotComponents.Insert;

if Conectado2 then
Begin
with adotComponents do begin
while not Eof do
Begin
dsComponents.DataSet:= adotComponents;
with DBGrid1 do begin
TabOrder := 0;
TitleFont.Color := clWindowText;
TitleFont.Height := -14 ;
TitleFont.Name := 'MS Sans Serif';
TitleFont.Style := [fsBold] ;
DataSource := dsComponents ;
end;
DBNavigator1.DataSource:=dsComponents;
DBGrid1.DataSource:=dsComponents;
Next;
End;
First;
End;
End;
End;
End;

ecfisa
15-09-2014, 23:15:24
Hola principiodual.

Por favor cuando incluyas código en tus mensajes usa las etiquetas para darle legibilidad. Uso:

http://sia1.subirimagenes.net/img/2014/09/12/140912092124532033.jpg

Ya las agregué en tu mensaje.

Saludos y gracias por tu colaboración :)

principiodual
15-09-2014, 23:22:45
Amigo ya lo resolví y disculpa si no identifico el código, no me agarra el éditor de codigo en respuesta... pero público aquí como me funciona por si a alguién mas le paso algo así y muchas gracias, porque con tus preguntas me hiciste analizar mejor el código y poderme dar cuenta de mi error... Aquí está el código como me funciona... el primer error es que uso la misma variable Conectado2 veces, cree otra var que se llama Conectado3 y saque la carga del dbgrid y el dbnavigator fuera del ciclo controlado por el Conectado3, quedando así.

principiodual
15-09-2014, 23:26:50
Hola principiodual.

Por favor cuando incluyas código en tus mensajes usa las etiquetas para darle legibilidad. Uso:

http://sia1.subirimagenes.net/img/2014/09/12/140912092124532033.jpg

Ya las agregué en tu mensaje.

Saludos y gracias por tu colaboración :)

Gracias por la acotación, estoy por opera y no me agarra las etiquetas, voy a abrir la página por Mozilla a ver si es el navegador y publicar el código como me funciona, por si alguién mas le llegase pasar lo mismo que a mi tenga la solución... Gracias :D

principiodual
15-09-2014, 23:35:31
aquí está el código como me funciona, ahora si puede agregar aún el dbgrid venga vacio ya sea porque la tabla a la que se conecta no tiene datos y pueda ser llenado directo desde el aplicativo o programa.

procedure TForm3.cargaDBGRID;
begin
StrSQL:='';

StrSQL:='SELECT * FROM GEINVZLA_TB_CUENTAS;';

Cn002 := TADOConnection.Create(nil);
adotComponents := TADOQuery.Create(nil);
//Conexion a la Base de datos
Conectado2:=Open_DB (Cn002 , 5 , ServerDB, NameDB2, '', PasswordDB, '' );


//si hay conexion continue con el proceso
if Conectado2 then
Begin

//Se Abre el DataSet de la factura
Conectado3:= Open_ADO_Qry(Cn002,adotComponents,StrSQL,false);



adotComponents.Open;
adotComponents.Edit;
adotComponents.Insert;

dsComponents.DataSet:= adotComponents;
DBGrid1.DataSource:=dsComponents;
DBNavigator1.DataSource:=dsComponents;


if Conectado3 then
Begin
with adotComponents do begin

while not Eof do
Begin

with DBGrid1 do begin
TabOrder := 0;
TitleFont.Color := clWindowText;
TitleFont.Height := -14 ;
TitleFont.Name := 'MS Sans Serif';
TitleFont.Style := [fsBold] ;
DataSource := dsComponents ;
end;
Next;
End;
First;
End;
End;
End;
End;

Muchas gracias Casimiro Notevi y Ecfisa, como siempre un sitio web muy eficiente y colaborador con todos nosotros. Buenas tardes. :D

P.D= El navegador Opera no acepta las etiquetas del formato de respuesta que usan en el sitio web, tuve que usar Mozilla, no se si sea cuestión de opera o de Club Delphi.

ecfisa
16-09-2014, 00:05:52
Hola principiodual.

No he probado con el navegador Opera pero voy a revisarlo.

Saludos y muchas gracias por avisarnos. :)

ecfisa
16-09-2014, 00:15:57
Hola de nuevo.

Acabo de descargar el Opera (ver.: Stable 24.0.1558.53) y no me ha dado problemas (te estoy escribiendo este mensaje desde él)

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
Caption:= '';
for i:= 0 to 9 do
Caption:= Caption + IntToStr(i);
end;

Tal vez sea causa de algún plugin o alguna configuración que hayas echo en el navegador ...

Saludos :)

Edito: Muchas gracias por publicar como lo solucionaste. ^\||/