Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2009-06

apertura de tablas

12 messages · 6 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Paola Bruccoleri

Hola a todos nuevamente..

Se me ha presentado otra situaci�n, y me gustar�a ver c�mo lo resuelven Uds, ya que son mucho m�s experimentados que yo en este lenguaje..
Estoy usando los componentes Zeos.
En un datamodule coloqu� el zconnection.
En cada form pongo los componentes ttables o tquerys que necesito. Pero, hay forms que llaman a otros donde se usa
la misma tabla en ambos: por ejemplo en el caso
de un form de facturaci�n y en el de busqueda de clientes. Puede ser un ttable o un tquery, no s�... Claro que en el ejemplo que puse, podr�a haber
puesto un tquery vac�o en el form de facturaci�n, que se ejecutara desde c�digo con el cliente elegido en la busqueda...

En el c�digo que comparti� Joshy:

begin
[...]
    ElCodigoDeCliente:=-1; //Valor inv�lido.
    try
      BuscaCliente:=TfrmBuscaCliente.Create(Self);
      if BuscaCliente.ShowModalmrCancel then begin
         ElCodigoDeCliente:=BuscaCliente.IDCliente;
      end else begin
         //Se ha cancelado la b�squeda
         Exit; //Por ejemplo.
      end;
    finally
      FreeAndNIL(BuscaCliente); //Libera el formulario.
    end;
[...]
end;
donde:
function frmBuscaCliente.GetIDCliente(): Integer;
begin
	Result:=Dataset.FieldByName('CLIENTID').asInteger;
end;

en este caso, no pod�a abrir la tabla en la
busqueda y cerrarla al salir, porque salta error
al obtener el IDCliente porque obvio que cuando
lleg� all�, la tabla ya se cerr�..

Pero a su vez, el form de busqueda puede abrirse
independientemente de si fue llamado desde otro
lado, por ej, si se necesita buscar un dato cualquiera

bueno, espero se haya entendido la cuesti�n
muchas gracias
chauuuuuuuuuuuuu
=======================
A/P Paola Bruccoleri Arrambide
San Jos� de Mayo - San Jos� - URUGUAY

Blog: http://paolabruccoleri.reducativa.com
Portal Educativo: http://www.reducativa.com.uy
Wiki: http://wiki.reducativa.com
Material sobre las XO:
http://www.reducativa.com/wiki/index.php?title=Proyecto_OLPC_-_Plan_Ceibal Cartillas XO Sugar 8.2:
http://www.reducativa.com/wiki/index.php?title=Cartillas_sobre_uso_de_la_XO

Reply by email

Abraham

Hola Paola, desconosco con que base de datos estas trabajando, pero mi pregunta es porque no usas los procedimientos almacenadas (si esque tu base de datos lo soporta), porque con el metodo que estas usando, pues siempre vas a tener tablas abiertas , hasta ke temrines de usarlas por completo, otra forma seri abrir y cerrarlas las veces que tengas que usar dicha tabla.

si tienes las tablas abiertas esto implicara que la memoria que usa tu programa va a ir aumentando, tambien se vera afectada tu aplicacion segun la cantidad de registros :S y esto va hacer las busquedas mas lentas y que tu aplicaicon sea lenta.

con procedimientos almacenados todo el trabajo de consultas, modificaciones, eliminacion y agregar registros lo haga el propio servidor, asi haces que tu aplicacio sea mas fluida.

espero no star diciendo tonterias pero asi lo veo yo.

Salu2
-------------------
Abraham Monta�o
abraham.montano en gmail.com
Chiclayo - Per�
Tel: 074-214324
Cel: 074-979034545
---------------------

El 15 de junio de 2009 16:28, Paola Bruccoleri
<pbruccoleri en adinet.com.uy>escribi�:

Show quoted text 69 lines
Hola a todos nuevamente.. Se me ha presentado otra situaci�n, y me gustar�a ver c�mo lo resuelven Uds, ya que son mucho m�s experimentados que yo en este lenguaje.. Estoy usando los componentes Zeos. En un datamodule coloqu� el zconnection. En cada form pongo los componentes ttables o tquerys que necesito. Pero, hay forms que llaman a otros donde se usa la misma tabla en ambos: por ejemplo en el caso de un form de facturaci�n y en el de busqueda de clientes. Puede ser un ttable o un tquery, no s�... Claro que en el ejemplo que puse, podr�a haber puesto un tquery vac�o en el form de facturaci�n, que se ejecutara desde c�digo con el cliente elegido en la busqueda... En el c�digo que comparti� Joshy: begin [...] ElCodigoDeCliente:=-1; //Valor inv�lido. try BuscaCliente:=TfrmBuscaCliente.Create(Self); if BuscaCliente.ShowModalmrCancel then begin ElCodigoDeCliente:=BuscaCliente.IDCliente; end else begin //Se ha cancelado la b�squeda Exit; //Por ejemplo. end; finally FreeAndNIL(BuscaCliente); //Libera el formulario. end; [...] end; donde: function frmBuscaCliente.GetIDCliente(): Integer; begin Result:=Dataset.FieldByName('CLIENTID').asInteger; end; en este caso, no pod�a abrir la tabla en la busqueda y cerrarla al salir, porque salta error al obtener el IDCliente porque obvio que cuando lleg� all�, la tabla ya se cerr�.. Pero a su vez, el form de busqueda puede abrirse independientemente de si fue llamado desde otro lado, por ej, si se necesita buscar un dato cualquiera bueno, espero se haya entendido la cuesti�n muchas gracias chauuuuuuuuuuuuu ======================= A/P Paola Bruccoleri Arrambide San Jos� de Mayo - San Jos� - URUGUAY Blog: http://paolabruccoleri.reducativa.com Portal Educativo: http://www.reducativa.com.uy Wiki: http://wiki.reducativa.com Material sobre las XO: http://www.reducativa.com/wiki/index.php?title=Proyecto_OLPC_-_Plan_Ceibal Cartillas XO Sugar 8.2: http://www.reducativa.com/wiki/index.php?title=Cartillas_sobre_uso_de_la_XO _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090615/223ebed0/attachment.html>

Reply by email

Fredy Gonzales
to Paola Bruccoleri: Hola a todos nuevamente.. Se me ha presentado otra situaci�n, y me gustar�a ver…

Hola,

La forma como lo trabajo yo es tambien creando dataset desde el Modulo de Datos.

En los formularios solo coloco los DataSource, enlazados dataset que halla establecido.

A Nivel de DataSet, siempre utilizo los TZReadOnly, para presentacion de datos o algo por listar o buscar, para lo que es mantenimiento de datos uso los TZQuery con parametro para la consulta individual.

Digamos si tengo un formulario clientes, entonces tengo dos dataset , uno de solo lectura y el otro para mantenimiento.

Porque dos?

Esto me das mejor entendimiento a nivel programacion y no me muelo el cerebro recordando para que coloque este TZQuery.

Espero te ayude en algo.

Saludos.

FG

Earlier message 74 lines
----- Original Message ----- From: "Paola Bruccoleri" <pbruccoleri en adinet.com.uy> To: <lazarus-es en lists.lazarus.freepascal.org> Sent: Monday, June 15, 2009 4:28 PM Subject: [Lazarus-es] apertura de tablas Hola a todos nuevamente.. Se me ha presentado otra situaci�n, y me gustar�a ver c�mo lo resuelven Uds, ya que son mucho m�s experimentados que yo en este lenguaje.. Estoy usando los componentes Zeos. En un datamodule coloqu� el zconnection. En cada form pongo los componentes ttables o tquerys que necesito. Pero, hay forms que llaman a otros donde se usa la misma tabla en ambos: por ejemplo en el caso de un form de facturaci�n y en el de busqueda de clientes. Puede ser un ttable o un tquery, no s�... Claro que en el ejemplo que puse, podr�a haber puesto un tquery vac�o en el form de facturaci�n, que se ejecutara desde c�digo con el cliente elegido en la busqueda... En el c�digo que comparti� Joshy: begin [...] ElCodigoDeCliente:=-1; //Valor inv�lido. try BuscaCliente:=TfrmBuscaCliente.Create(Self); if BuscaCliente.ShowModalmrCancel then begin ElCodigoDeCliente:=BuscaCliente.IDCliente; end else begin //Se ha cancelado la b�squeda Exit; //Por ejemplo. end; finally FreeAndNIL(BuscaCliente); //Libera el formulario. end; [...] end; donde: function frmBuscaCliente.GetIDCliente(): Integer; begin Result:=Dataset.FieldByName('CLIENTID').asInteger; end; en este caso, no pod�a abrir la tabla en la busqueda y cerrarla al salir, porque salta error al obtener el IDCliente porque obvio que cuando lleg� all�, la tabla ya se cerr�.. Pero a su vez, el form de busqueda puede abrirse independientemente de si fue llamado desde otro lado, por ej, si se necesita buscar un dato cualquiera bueno, espero se haya entendido la cuesti�n muchas gracias chauuuuuuuuuuuuu ======================= A/P Paola Bruccoleri Arrambide San Jos� de Mayo - San Jos� - URUGUAY Blog: http://paolabruccoleri.reducativa.com Portal Educativo: http://www.reducativa.com.uy Wiki: http://wiki.reducativa.com Material sobre las XO: http://www.reducativa.com/wiki/index.php?title=Proyecto_OLPC_-_Plan_Ceibal Cartillas XO Sugar 8.2: http://www.reducativa.com/wiki/index.php?title=Cartillas_sobre_uso_de_la_XO

Reply by email

Fredy Gonzales
to Abraham: Hola Paola, desconosco con que base de datos estas trabajando, pero mi pregunta es…

Amigos,

Estoy trabajando un programa sencillo, pero me he trancado en un problema con el combobox.

Estoy cargando un combobox con data, alli coloco la descripcion y tambien creo un array global al formulario donde guardo el id de la data.

Digamos algo asi

var
  TxtQuery: String;
  nCont: Integer;
begin
  TxtQuery:='Select emp_id,emp_razsoc from empresa';
  DataModule1.lstempresa.SQL.Text:=TxtQuery;
  DataModule1.lstempresa.Open;
  cboempresa.Items.Clear;
  if DataModule1.lstempresa.RecordCount >0 then
     begin
        SetLength(aItems, DataModule1.lstempresa.RecordCount );
        nCont:=1;
        while Not DataModule1.lstempresa.EOF Do
        begin
            cboempresa.Items.Add(DataModule1.lstempresa.FieldByName('emp_razsoc').AsString);
            aItems[nCont]:=DataModule1.lstempresa.FieldByName('emp_id').AsString;  //array creado para guardar el ID de empresa.
            DataModule1.lstempresa.Next;
            nCont:=nCont + 1;
        end;
     end;
  DataModule1.lstempresa.Close;

Hasta alli todo OK, el punto esta cuando realizo la sinconizacion Combobox + Array desde el evento OnChange del combobox.

if (cboempresa.ItemIndex>0) then
 begin
    DataModule1.lstcencosto.Close;
    DataModule1.lstcencosto.Params.ParamByName('ID').AsString:= aItems[cboempresa.ItemIndex];
    DataModule1.lstcencosto.Open;
    DataModule1.lstcencosto.Refresh;
   // monitor de valores
    stdato.caption:=aItems[cboempresa.ItemIndex] ;
 end;

Como veran este me refresca otro DataSet con informacion x empresa, pero el combobox no se ubica en la posicion que deberia ser, siempre se salta un registro.Por tanto, el codigo de empresa no siempre es el real.

Es problema de logica o no debi usa el evento OnChange si no otro ?.

No uso el DBCombobox ni el DBLookupCombox porque no despliegan la lista, asi que estoy usando algo que siempre usaba en VB6.

Saludos.

FG

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090615/d4b45b77/attachment.html>

Reply by email

Fredy Gonzales

Solo para aclarar, creo un array porque se ha establecido que la tabla empresa no llegara a un maximo de 10 items.

Por tanto no tendre problema en trabajarlo a nivel de array.

FG

Earlier message 62 lines
----- Original Message ----- From: Fredy Gonzales To: Spanish version of Lazarus List Sent: Monday, June 15, 2009 5:20 PM Subject: Load combobox Amigos, Estoy trabajando un programa sencillo, pero me he trancado en un problema con el combobox. Estoy cargando un combobox con data, alli coloco la descripcion y tambien creo un array global al formulario donde guardo el id de la data. Digamos algo asi var TxtQuery: String; nCont: Integer; begin TxtQuery:='Select emp_id,emp_razsoc from empresa'; DataModule1.lstempresa.SQL.Text:=TxtQuery; DataModule1.lstempresa.Open; cboempresa.Items.Clear; if DataModule1.lstempresa.RecordCount >0 then begin SetLength(aItems, DataModule1.lstempresa.RecordCount ); nCont:=1; while Not DataModule1.lstempresa.EOF Do begin cboempresa.Items.Add(DataModule1.lstempresa.FieldByName('emp_razsoc').AsString); aItems[nCont]:=DataModule1.lstempresa.FieldByName('emp_id').AsString; //array creado para guardar el ID de empresa. DataModule1.lstempresa.Next; nCont:=nCont + 1; end; end; DataModule1.lstempresa.Close; Hasta alli todo OK, el punto esta cuando realizo la sinconizacion Combobox + Array desde el evento OnChange del combobox. if (cboempresa.ItemIndex>0) then begin DataModule1.lstcencosto.Close; DataModule1.lstcencosto.Params.ParamByName('ID').AsString:= aItems[cboempresa.ItemIndex]; DataModule1.lstcencosto.Open; DataModule1.lstcencosto.Refresh; // monitor de valores stdato.caption:=aItems[cboempresa.ItemIndex] ; end; Como veran este me refresca otro DataSet con informacion x empresa, pero el combobox no se ubica en la posicion que deberia ser, siempre se salta un registro.Por tanto, el codigo de empresa no siempre es el real. Es problema de logica o no debi usa el evento OnChange si no otro ?. No uso el DBCombobox ni el DBLookupCombox porque no despliegan la lista, asi que estoy usando algo que siempre usaba en VB6. Saludos. FG ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090615/15f28620/attachment.html>

Reply by email

Fredy Gonzales

Disculpe,

Ya encontre el problema, era que el array empezaba de 0, gracias de todos modos.

FG

Earlier message 74 lines
----- Original Message ----- From: Fredy Gonzales To: Spanish version of Lazarus List Sent: Monday, June 15, 2009 5:26 PM Subject: Re: Load combobox Solo para aclarar, creo un array porque se ha establecido que la tabla empresa no llegara a un maximo de 10 items. Por tanto no tendre problema en trabajarlo a nivel de array. FG ----- Original Message ----- From: Fredy Gonzales To: Spanish version of Lazarus List Sent: Monday, June 15, 2009 5:20 PM Subject: Load combobox Amigos, Estoy trabajando un programa sencillo, pero me he trancado en un problema con el combobox. Estoy cargando un combobox con data, alli coloco la descripcion y tambien creo un array global al formulario donde guardo el id de la data. Digamos algo asi var TxtQuery: String; nCont: Integer; begin TxtQuery:='Select emp_id,emp_razsoc from empresa'; DataModule1.lstempresa.SQL.Text:=TxtQuery; DataModule1.lstempresa.Open; cboempresa.Items.Clear; if DataModule1.lstempresa.RecordCount >0 then begin SetLength(aItems, DataModule1.lstempresa.RecordCount ); nCont:=1; while Not DataModule1.lstempresa.EOF Do begin cboempresa.Items.Add(DataModule1.lstempresa.FieldByName('emp_razsoc').AsString); aItems[nCont]:=DataModule1.lstempresa.FieldByName('emp_id').AsString; //array creado para guardar el ID de empresa. DataModule1.lstempresa.Next; nCont:=nCont + 1; end; end; DataModule1.lstempresa.Close; Hasta alli todo OK, el punto esta cuando realizo la sinconizacion Combobox + Array desde el evento OnChange del combobox. if (cboempresa.ItemIndex>0) then begin DataModule1.lstcencosto.Close; DataModule1.lstcencosto.Params.ParamByName('ID').AsString:= aItems[cboempresa.ItemIndex]; DataModule1.lstcencosto.Open; DataModule1.lstcencosto.Refresh; // monitor de valores stdato.caption:=aItems[cboempresa.ItemIndex] ; end; Como veran este me refresca otro DataSet con informacion x empresa, pero el combobox no se ubica en la posicion que deberia ser, siempre se salta un registro.Por tanto, el codigo de empresa no siempre es el real. Es problema de logica o no debi usa el evento OnChange si no otro ?. No uso el DBCombobox ni el DBLookupCombox porque no despliegan la lista, asi que estoy usando algo que siempre usaba en VB6. Saludos. FG ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090615/b1c182e0/attachment-0001.html>

Reply by email

Paola Bruccoleri

Hola Abraham..
estoy usando mysql5.
Pensaba si usar SP, pero a veces hay consultas
chicas que quiz�s no lo ameriten, no s�...
chauuuuuuuuuu

you wrote 20 lines
Hola Paola, desconosco� con que base de datos estas trabajando, pero mi pregunta es porque no usas los procedimientos almacenadas (si esque tu base de datos lo soporta), porque con el metodo que estas usando, pues siempre vas a tener tablas abiertas , hasta ke temrines de usarlas por completo, otra forma seri abrir y cerrarlas las veces que tengas que usar dicha tabla. si tienes las tablas abiertas esto implicara que la memoria que usa tu programa va a ir aumentando, tambien se vera afectada tu aplicacion segun la cantidad de registros :S y esto va� hacer las busquedas mas lentas y que tu aplicaicon sea lenta. con procedimientos almacenados todo el trabajo de consultas, modificaciones, eliminacion y agregar registros lo haga el propio servidor, asi haces que tu aplicacio sea mas fluida. espero no star diciendo tonterias pero asi lo veo yo.

=======================
A/P Paola Bruccoleri Arrambide
San Jos� de Mayo - San Jos� - URUGUAY

Blog: http://paolabruccoleri.reducativa.com
Portal Educativo: http://www.reducativa.com.uy
Wiki: http://wiki.reducativa.com
Material sobre las XO:
http://www.reducativa.com/wiki/index.php?title=Proyecto_OLPC_-_Plan_Ceibal Cartillas XO Sugar 8.2:
http://www.reducativa.com/wiki/index.php?title=Cartillas_sobre_uso_de_la_XO

Reply by email

Jesus Reyes
Show quoted text 9 lines
������� SetLength(aItems, DataModule1.lstempresa.RecordCount); ������� nCont:=1; while Not DataModule1.lstempresa.EOF Do������ begin cboempresa.Items.Add(DataModule1.lstempresa.FieldByName('emp_razsoc').AsString); ���� aItems[nCont]:=DataModule1.lstempresa.FieldByName('emp_id').AsString;�

Suponiendo que emp_id es de tipo entero quizas puedas hacer algo como esto:

cboEmpresa.Items.AddObject(
DataModule1.lstempresa.FieldByName('emp_razsoc').AsString, TObject(PtrInt(DataModule1.lstempresa.FieldByName('emp_id').AsInteger)) );

De tal manera que cuando uses OnChange u OnSelect del combo y necesites el valor del emp_id, puedes recuperarlo con:

Id := PtrInt(cboEmpresa.Items.Objects[cboEmpresa.ItemIndex]));

De esta forma y al costo del feo casting te ahorras algo de codigo y te evitas el manejo del array que como has comprobado puede llegar a causar confusion al tener que manter paralelamente sincronia entre los elementos.

Saludos.

Jesus Reyes A.

�Obt�n la mejor experiencia en la web! Descarga gratis el nuevo Internet Explorer 8. http://downloads.yahoo.com/ieak8/?l=mx

Reply by email

Fredy Gonzales
to Jesus Reyes

Gracias,

Trabaja perfecto.

FG

Earlier message 45 lines
----- Original Message ----- From: "Jesus Reyes" <jesusrmx en yahoo.com.mx> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org> Sent: Monday, June 15, 2009 10:25 PM Subject: Re: [Lazarus-es] Load combobox > > SetLength(aItems, DataModule1.lstempresa.RecordCount); > > nCont:=1; > while Not DataModule1.lstempresa.EOF Do > begin >cboempresa.Items.Add(DataModule1.lstempresa.FieldByName('emp_razsoc').AsString); > > aItems[nCont]:=DataModule1.lstempresa.FieldByName('emp_id').AsString; Suponiendo que emp_id es de tipo entero quizas puedas hacer algo como esto: cboEmpresa.Items.AddObject( DataModule1.lstempresa.FieldByName('emp_razsoc').AsString, TObject(PtrInt(DataModule1.lstempresa.FieldByName('emp_id').AsInteger)) ); De tal manera que cuando uses OnChange u OnSelect del combo y necesites el valor del emp_id, puedes recuperarlo con: Id := PtrInt(cboEmpresa.Items.Objects[cboEmpresa.ItemIndex])); De esta forma y al costo del feo casting te ahorras algo de codigo y te evitas el manejo del array que como has comprobado puede llegar a causar confusion al tener que manter paralelamente sincronia entre los elementos. Saludos. Jesus Reyes A. �Obt�n la mejor experiencia en la web! Descarga gratis el nuevo Internet Explorer 8. http://downloads.yahoo.com/ieak8/?l=mx

Reply by email

Jose Antonio Cuello

Hola, s�lo quer�a comentar unas cosillas que tal vez te puedan ayudar. Al realizar la sentencia de adici�n de items al cualquier TStrings, como son los items del combobox devuelve el indice que a a�adido por lo que no har�a falta el contador y todo su control, es decir que bastar�a con

  nCont := cboempresa.Items.Add(DataModule1.lstempresa.FieldByName('emp_razsoc').AsString);

Otra idea, si en vez de usar Items.Add existe un Items.AddObject( descripcion, objeto ) que resulta m�s �til para cuando queremos listas m�s complejas.
Puede parecer m�s complejo pero da una mayor flexibilidad, sobretodo de cara a que posteriormente queramos ampliar los datos a guardar. Por ejemplo.

    // Declaraci�n de los datos a guardar
    type
      TmiObjeto = class
      private
        FCampo1: String;
        FCampo2: String;
      public
        property Campo1: String read FCampo1 write FCampo1;
        property Campo2: String read FCampo2 write FCampo2;
      end;
    // Declaracion de variables
    var opc: TmiObjeto;
    // Rutina de carga
    while Not DataModule1.lstempresa.EOF Do
    begin
      opc := TmiObjeto.Create;
      opc.Campo1 :=
    DataModule1.lstempresa.FieldByName('emp_razsoc').AsString;
      opc.Campo2 := DataModule1.lstempresa.FieldByName('emp_id').AsString;
    cboempresa.Items.AddObject(DataModule1.lstempresa.FieldByName('emp_razsoc').AsString,
    opc);
      DataModule1.lstempresa.Next;
    end;
    // Rutina de recogida de datos
    DataModule1.lstcencosto.Params.ParamByName('ID').AsString:=
    cboempresa.Items.Objects[cboempresa.ItemIndex].Campo2;

Espero haberme expresado correctamente, se entienda y sobre todo sea de utilidad.

P.S.: Los objetos del combobox son liberados al destruir el combobox, a menos que se cambie una propiedad del mismo a false pero que no me recuerdo ahora cual es.

Show quoted text 52 lines
Amigos, Estoy trabajando un programa sencillo, pero me he trancado en un problema con el combobox. Estoy cargando un combobox con data, alli coloco la descripcion y tambien creo un array global al formulario donde guardo el id de la data. Digamos algo asi var TxtQuery: String; nCont: Integer; begin TxtQuery:='Select emp_id,emp_razsoc from empresa'; DataModule1.lstempresa.SQL.Text:=TxtQuery; DataModule1.lstempresa.Open; cboempresa.Items.Clear; if DataModule1.lstempresa.RecordCount >0 then begin SetLength(aItems, DataModule1.lstempresa.RecordCount ); nCont:=1; while Not DataModule1.lstempresa.EOF Do begin cboempresa.Items.Add(DataModule1.lstempresa.FieldByName('emp_razsoc').AsString); aItems[nCont]:=DataModule1.lstempresa.FieldByName('emp_id').AsString; //array creado para guardar el ID de empresa. DataModule1.lstempresa.Next; nCont:=nCont + 1; end; end; DataModule1.lstempresa.Close; Hasta alli todo OK, el punto esta cuando realizo la sinconizacion Combobox + Array desde el evento OnChange del combobox. if (cboempresa.ItemIndex>0) then begin DataModule1.lstcencosto.Close; DataModule1.lstcencosto.Params.ParamByName('ID').AsString:= aItems[cboempresa.ItemIndex]; DataModule1.lstcencosto.Open; DataModule1.lstcencosto.Refresh; // monitor de valores stdato.caption:=aItems[cboempresa.ItemIndex] ; end; Como veran este me refresca otro DataSet con informacion x empresa, pero el combobox no se ubica en la posicion que deberia ser, siempre se salta un registro.Por tanto, el codigo de empresa no siempre es el real. Es problema de logica o no debi usa el evento OnChange si no otro ?. No uso el DBCombobox ni el DBLookupCombox porque no despliegan la lista, asi que estoy usando algo que siempre usaba en VB6. Saludos. FG

Reply by email

JoshyFun
to Paola Bruccoleri: Hola a todos nuevamente.. Se me ha presentado otra situaci�n, y me gustar�a ver…

Hello Paola,

Monday, June 15, 2009, 11:28:23 PM, you wrote:

PB> Se me ha presentado otra situaci�n, y me gustar�a PB> ver c�mo lo resuelven Uds, ya que son mucho m�s PB> experimentados que yo en este lenguaje..
PB> Estoy usando los componentes Zeos.
PB> En un datamodule coloqu� el zconnection.
PB> En cada form pongo los componentes ttables o tquerys que necesito. [...]
PB> donde:
PB> function frmBuscaCliente.GetIDCliente(): Integer; PB> begin
PB> Result:=Dataset.FieldByName('CLIENTID').asInteger; PB> end;
PB> en este caso, no pod�a abrir la tabla en la
PB> busqueda y cerrarla al salir, porque salta error PB> al obtener el IDCliente porque obvio que cuando PB> lleg� all�, la tabla ya se cerr�..
PB> Pero a su vez, el form de busqueda puede abrirse PB> independientemente de si fue llamado desde otro PB> lado, por ej, si se necesita buscar un dato cualquiera

Empezando por que yo con bases de datos para trabajos empresariales a penas he trabajado (uso bases de datos para almacenamientos estructurados program�ticos), dir�a que hay que huir de los TTable si se usa una base de datos relacional; y digo huir para los casos generales ya que hay situaciones en las que un TTable es lo m�s pr�ctico, pero la verdad no veo muchas que no sean el alta o la baja masiva de registros sin intervenci�n del usuario.

En el ejemplo de la b�squeda de clientes, b�squeda de art�culos y cosas similares yo crear�a un modulo de datos con la conexi�n a la base de datos (o directamente en cada form) y un TZQuery que realize las b�squeda, bien por partes de campos, o listando en un dbgrid o algo as�.

De este modo el formulario funciona de modo aut�nomo, y un servidor de bases de datos no va a tener problema por que cada cliente mantenga ocasionalmente 4,5...n conexiones simultaneas, y s�lo has de mantener ciertas precauciones de integridad de datos cuando trabajes con m�ltiples copias del programa a la vez, ya que el c�digo de cliente que has obtenido en la b�squeda puede no existir ya cuando vayas a usarlo (si alguien lo ha eliminado).

Best regards, JoshyFun

Reply by email

Paola Bruccoleri
to JoshyFun

Hola JoshyFun

Show quoted text 5 lines
dir�a que hay que huir de los TTable si se usa una base de datos relacional; y digo huir para los casos generales ya que hay situaciones en las que un TTable es lo m�s pr�ctico, pero la verdad no veo muchas que no sean el alta o la baja masiva de registros sin intervenci�n del usuario.

claro, en eso tienes raz�n..pero como te digo,
hay tablas muy muy chiquitas en los sistemas de
gesti�n (monedas, vendedores, impuestos, etc) que creo que es m�s f�cil solucionarlo con un ttable.

Show quoted text 7 lines
De este modo el formulario funciona de modo aut�nomo, y un servidor de bases de datos no va a tener problema por que cada cliente mantenga ocasionalmente 4,5...n conexiones simultaneas, y s�lo has de mantener ciertas precauciones de integridad de datos cuando trabajes con m�ltiples copias del programa a la vez, ya que el c�digo de cliente que has obtenido en la b�squeda puede no existir ya cuando vayas a usarlo (si alguien lo ha eliminado).

si, he visto por ej en el c�digo de Facturlinex
que usan un zconnection en cada form,
abriendo/cerrando conecciones a cada rato.. y es
la primera vez que lo veo as�..

Bueno, seguir� viendo esto..
chauuuuuuuu

=======================
A/P Paola Bruccoleri Arrambide
San Jos� de Mayo - San Jos� - URUGUAY

Blog: http://paolabruccoleri.reducativa.com
Portal Educativo: http://www.reducativa.com.uy
Wiki: http://wiki.reducativa.com
Material sobre las XO:
http://www.reducativa.com/wiki/index.php?title=Proyecto_OLPC_-_Plan_Ceibal Cartillas XO Sugar 8.2:
http://www.reducativa.com/wiki/index.php?title=Cartillas_sobre_uso_de_la_XO

Reply by email