Ir al contenido


Foto

Problema con locate :(


  • Por favor identifícate para responder
13 respuestas en este tema

#1 lKinGl

lKinGl

    Advanced Member

  • Moderador
  • PipPipPip
  • 118 mensajes
  • LocationVenezuela

Escrito 01 noviembre 2008 - 12:42

Salu2, y felicitaciones por el nuevo foro y deseandoles éxito inauguro este hilo haciendo la siguiente consulta ....

Salu2 amigos foristas...

tengo un formulario que tiene lo siguiente:

2 combobox
1 edit
3bitbtn

lo que se quiere es lo siguiente:

en la misma aplicacion hay un formulario el cual se llena una base de datos....bla bla bla..

y en el formulario actual necesito cargar una nueva base de datos provenientes de la nombrada anteriormente (por que la primera que mencioné es temporal)....

tengo un camplo clave en ambas tablas llamado unico, pero cuando le monto un locate para que busque si el registro esta o no me da error  :-\

este código funciona bien pero hace falta alguna función que permita verificar si los datos existen o no



delphi
  1. procedure TForm44.BitBtn1Click(Sender: TObject);
  2. var
  3. Fecha:TDate;
  4. unico,Grupo,Des,mes,ano:String;
  5. debe:Double;
  6. begin
  7.  
  8. With Form1.Table11 do
  9.   begin
  10.     First;
  11.     while not Eof do
  12.       begin
  13.         unico:=FieldValues['unico'];
  14.         if  unico='0' then
  15.           begin
  16.           end
  17.           else
  18.           begin
  19.             With form1.Table14 do
  20.               Begin
  21.                 Insert;
  22.                 FieldValues['Fecha']:=form1.Table11.FieldValues['Fecha'];
  23.                 FieldValues['Grupo']:=Form1.Table11.FieldValues['Grupo'];
  24.                 FieldValues['Des_cu']:=Form1.Table11.FieldValues['des_cu'];
  25.                 FieldValues['debe']:=Form1.Table11.FieldValues['debe'];
  26.                 Post;
  27.               end;
  28.           end;
  29.         Next;
  30.       end;
  31.   end;
  32. exit;
  33. if ComboBox1.Text='Seleccione Mes' then
  34.   begin
  35.     Application.MessageBox('Disculpe, debe seleccionar un Mes','');
  36.     exit;
  37.   end;
  38.  
  39. if ComboBox2.Text='Seleccione Año' then
  40.   begin
  41.     Application.MessageBox('Disculpe, debe seleccionar un Año','');
  42.     exit;
  43.   end;
  44.  
  45. mes:=IntToStr(ComboBox1.ItemIndex+1);
  46. ano:=ComboBox2.Text;
  47. edit1.Text:='01'+'/'+mes+'/'+ano;
  48.  
  49. with Form45.Query1 do begin
  50.   Close;
  51.   SQL.Text := 'Select Fecha,grupo,des_cu,debe,haber '+
  52.             'from costosygastos.db '+
  53.             'where Extract(month from fecha) = '+IntToStr(MonthOf(StrToDate(Edit1.Text)))+
  54.             ' and Extract(year from fecha) = '+IntToStr(YearOf(StrToDate(Edit1.Text)));
  55.   Open;
  56. end;
  57. form45.QRLabel1.Caption:='Costos y Gastos de '+ComboBox1.Text+' de '+ComboBox2.Text;
  58. form45.QuickRep1.Preview;
  59. exit;
  60. end;



Salu2 y gracias adelantadas
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.242 mensajes
  • LocationMéxico

Escrito 01 noviembre 2008 - 01:54

Hola lKinGl

Me pregunto donde quieres hacer esa validación, pero me imagino que aqui es donde la quieres:



delphi
  1. with Form45.Query1 do begin
  2.   Close;
  3.   SQL.Text := 'Select Fecha,grupo,des_cu,debe,haber '+
  4.               'from costosygastos.db '+
  5.               'where Extract(month from fecha) = '+IntToStr(MonthOf(StrToDate(Edit1.Text)))+
  6.               ' and Extract(year from fecha) = '+IntToStr(YearOf(StrToDate(Edit1.Text)));
  7.   Open;
  8.  
  9.   if recordcount > 0 then begin
  10.       //Existe
  11.   end
  12.   else begin
  13.           //No existe
  14.   end;
  15.  
  16. end;



Salud OS
  • 0

#3 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 01 noviembre 2008 - 02:04

este post ya le habia visto, por casualidad revisastes el componente TBatchMove que te habia recomendado????
  • 0

#4 lKinGl

lKinGl

    Advanced Member

  • Moderador
  • PipPipPip
  • 118 mensajes
  • LocationVenezuela

Escrito 01 noviembre 2008 - 02:07

si eduarcol si lo revisé y lo intenté, pero me agregaba los registros sin importar si existia o no, sabes alguna forma de programarlo para que se evite eso?

egostar, el locate lo quiero aqui:



delphi
  1. With Form1.Table11 do
  2.   begin
  3.     First;
  4.     while not Eof do
  5.       begin
  6.         unico:=FieldValues['unico'];
  7.         if  unico='0' then
  8.           begin
  9.           end
  10.           else
  11.           begin
  12. // aqui el locate         
  13.   With form1.Table14 do
  14.               Begin
  15.                 Insert;
  16.                 FieldValues['Fecha']:=form1.Table11.FieldValues['Fecha'];
  17.                 FieldValues['Grupo']:=Form1.Table11.FieldValues['Grupo'];
  18.                 FieldValues['Des_cu']:=Form1.Table11.FieldValues['des_cu'];
  19.                 FieldValues['debe']:=Form1.Table11.FieldValues['debe'];
  20.                 Post;
  21.               end;
  22.           end;
  23.         Next;
  24.       end;
  25.   end;




ya lo he intentado poner hay pero lanza error
  • 0

#5 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 01 noviembre 2008 - 02:09

sip, generando el campo clave para que valide las excepciones y lo programas en base a que quieres que haga en las excepciones
  • 0

#6 Caral

Caral

    Advanced Member

  • Administrador
  • 4.261 mensajes
  • LocationCosta Rica

Escrito 01 noviembre 2008 - 02:11

Hola
Bienvenido
Empecemos por aqui:
Supongo que la comparacion la sacas del edit?.



delphi
  1. procedure TForm44.BitBtn1Click(Sender: TObject);
  2. var
  3. Fecha:TDate;
  4. unico,Grupo,Des,mes,ano:String;
  5. debe:Double;
  6. begin
  7.  
  8. With Form1.Table11 do
  9.   begin
  10.     First;
  11.     while not Eof do
  12.       begin
  13.         unico:= Fieldbyname('unico').Value;
  14.         if  unico= Edit1.Text then
  15.           begin
  16.           Showmessaje('el registro ya esta');
  17.           end
  18.           else
  19.           begin
  20.             With form1.Table14 do
  21.               Begin
  22.                 Insert;
  23.                 FieldValues['Fecha']:=form1.Table11.FieldValues['Fecha'];
  24.                 FieldValues['Grupo']:=Form1.Table11.FieldValues['Grupo'];
  25.                 FieldValues['Des_cu']:=Form1.Table11.FieldValues['des_cu'];
  26.                 FieldValues['debe']:=Form1.Table11.FieldValues['debe'];
  27.                 Post;
  28.               end;
  29.           end;
  30.         Next;
  31.       end;
  32.   end;
  33. exit;
  34. if ComboBox1.Text='Seleccione Mes' then
  35.   begin
  36.     Application.MessageBox('Disculpe, debe seleccionar un Mes','');
  37.     exit;
  38.   end;
  39.  
  40. if ComboBox2.Text='Seleccione Año' then
  41.   begin
  42.     Application.MessageBox('Disculpe, debe seleccionar un Año','');
  43.     exit;
  44.   end;
  45.  
  46. mes:=IntToStr(ComboBox1.ItemIndex+1);
  47. ano:=ComboBox2.Text;
  48. edit1.Text:='01'+'/'+mes+'/'+ano;
  49.  
  50. with Form45.Query1 do begin
  51.   Close;
  52.   SQL.Text := 'Select Fecha,grupo,des_cu,debe,haber '+
  53.             'from costosygastos.db '+
  54.             'where Extract(month from fecha) = '+IntToStr(MonthOf(StrToDate(Edit1.Text)))+
  55.             ' and Extract(year from fecha) = '+IntToStr(YearOf(StrToDate(Edit1.Text)));
  56.   Open;
  57. end;
  58. form45.QRLabel1.Caption:='Costos y Gastos de '+ComboBox1.Text+' de '+ComboBox2.Text;
  59. form45.QuickRep1.Preview;
  60. exit;
  61. end;



Hay otras formas de hacerlo, la verdad yo prefiero enlazarlo con sql y un query.
Saludos
  • 0

#7 lKinGl

lKinGl

    Advanced Member

  • Moderador
  • PipPipPip
  • 118 mensajes
  • LocationVenezuela

Escrito 01 noviembre 2008 - 02:31

sip, generando el campo clave para que valide las excepciones y lo programas en base a que quieres que haga en las excepciones


¿podrias dar un ejemplo?
  • 0

#8 lKinGl

lKinGl

    Advanced Member

  • Moderador
  • PipPipPip
  • 118 mensajes
  • LocationVenezuela

Escrito 01 noviembre 2008 - 02:31

Hola
Bienvenido
Empecemos por aqui:
Supongo que la comparacion la sacas del edit?.



delphi
  1. procedure TForm44.BitBtn1Click(Sender: TObject);
  2. var
  3. Fecha:TDate;
  4. unico,Grupo,Des,mes,ano:String;
  5. debe:Double;
  6. begin
  7.  
  8. With Form1.Table11 do
  9.   begin
  10.     First;
  11.     while not Eof do
  12.       begin
  13.         unico:= Fieldbyname('unico').Value;
  14.         if  unico= Edit1.Text then
  15.           begin
  16.           Showmessaje('el registro ya esta');
  17.           end
  18.           else
  19.           begin
  20.             With form1.Table14 do
  21.               Begin
  22.                 Insert;
  23.                 FieldValues['Fecha']:=form1.Table11.FieldValues['Fecha'];
  24.                 FieldValues['Grupo']:=Form1.Table11.FieldValues['Grupo'];
  25.                 FieldValues['Des_cu']:=Form1.Table11.FieldValues['des_cu'];
  26.                 FieldValues['debe']:=Form1.Table11.FieldValues['debe'];
  27.                 Post;
  28.               end;
  29.           end;
  30.         Next;
  31.       end;
  32.   end;
  33. exit;
  34. if ComboBox1.Text='Seleccione Mes' then
  35.   begin
  36.     Application.MessageBox('Disculpe, debe seleccionar un Mes','');
  37.     exit;
  38.   end;
  39.  
  40. if ComboBox2.Text='Seleccione Año' then
  41.   begin
  42.     Application.MessageBox('Disculpe, debe seleccionar un Año','');
  43.     exit;
  44.   end;
  45.  
  46. mes:=IntToStr(ComboBox1.ItemIndex+1);
  47. ano:=ComboBox2.Text;
  48. edit1.Text:='01'+'/'+mes+'/'+ano;
  49.  
  50. with Form45.Query1 do begin
  51.    Close;
  52.    SQL.Text := 'Select Fecha,grupo,des_cu,debe,haber '+
  53.              'from costosygastos.db '+
  54.              'where Extract(month from fecha) = '+IntToStr(MonthOf(StrToDate(Edit1.Text)))+
  55.              ' and Extract(year from fecha) = '+IntToStr(YearOf(StrToDate(Edit1.Text)));
  56.    Open;
  57. end;
  58. form45.QRLabel1.Caption:='Costos y Gastos de '+ComboBox1.Text+' de '+ComboBox2.Text;
  59. form45.QuickRep1.Preview;
  60. exit;
  61. end;


Hay otras formas de hacerlo, la verdad yo prefiero enlazarlo con sql y un query.
Saludos


como tu prefieras esta bien caral pero que haga lo que necesito :(
  • 0

#9 eduarcol

eduarcol

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.483 mensajes
  • LocationVenezuela

Escrito 01 noviembre 2008 - 02:36

¿podrias dar un ejemplo?


Trabajas con paradox cierto?, tengo entendido que si, bueno en el database desktop abre la table le das a modificar y le indicas cuales son los campos que no se repiten y te permiten diferenciar los registros, luego prueba de nuevo el batchmove y veras que facil es.
  • 0

#10 lKinGl

lKinGl

    Advanced Member

  • Moderador
  • PipPipPip
  • 118 mensajes
  • LocationVenezuela

Escrito 01 noviembre 2008 - 02:48


¿podrias dar un ejemplo?


Trabajas con paradox cierto?, tengo entendido que si, bueno en el database desktop abre la table le das a modificar y le indicas cuales son los campos que no se repiten y te permiten diferenciar los registros, luego prueba de nuevo el batchmove y veras que facil es.


si trabajo con paradox, probaré tu solucion haber como me va ;)
  • 0

#11 Caral

Caral

    Advanced Member

  • Administrador
  • 4.261 mensajes
  • LocationCosta Rica

Escrito 02 noviembre 2008 - 02:39

Hola
Y bueno el amigo lKinGl pudo solucionar el asunto?.
Me quede con la duda de eso. ???
Saludos
  • 0

#12 Caral

Caral

    Advanced Member

  • Administrador
  • 4.261 mensajes
  • LocationCosta Rica

Escrito 02 noviembre 2008 - 02:56

Hola
Pregunto:
Table11 es la temporal y Table14 es en la que se quiere insertar?.
Saludos
  • 0

#13 lKinGl

lKinGl

    Advanced Member

  • Moderador
  • PipPipPip
  • 118 mensajes
  • LocationVenezuela

Escrito 02 noviembre 2008 - 03:14

Salu2...

si caral ya está listo mi problema, a mi manera logré hacerlo funcionar.... sabia que con código se podia hacer  :D



delphi
  1. procedure TForm44.BitBtn1Click(Sender: TObject);
  2. var
  3. mes,ano:String;
  4. begin
  5.  
  6. if ComboBox1.Text='Seleccione Mes' then
  7.   begin
  8.     Application.MessageBox('Disculpe, debe seleccionar un Mes','');
  9.     exit;
  10.   end;
  11.  
  12. if ComboBox2.Text='Seleccione Año' then
  13.   begin
  14.     Application.MessageBox('Disculpe, debe seleccionar un Año','');
  15.     exit;
  16.   end;
  17.  
  18. Form1.Table11.First;
  19.   With Form1.Table11 do
  20.     Begin
  21.       While not Eof do
  22.         begin
  23.             // si el grupo es 5 ó 6
  24.           if (FieldValues['nogrupo']=5) or (FieldValues['nogrupo']=6) then
  25.             begin
  26.               //si consigue unico en la tabla14
  27.               if form1.Table14.Locate('unico',FieldValues['unico'],[]) then
  28.                 begin
  29.                   //no pasa nada
  30.                 end
  31.                 else
  32.                 begin
  33.                 //de lo contrario graba el registro
  34.                   With form1.Table14 do
  35.                     Begin
  36.                       Insert;
  37.                       FieldValues['unico']:=form1.Table11.FieldValues['unico'];
  38.                       FieldValues['Fecha']:=form1.Table11.FieldValues['Fecha'];
  39.                       FieldValues['Grupo']:=Form1.Table11.FieldValues['Grupo'];
  40.                       FieldValues['Des_cu']:=Form1.Table11.FieldValues['des_cu'];
  41.                       FieldValues['debe']:=Form1.Table11.FieldValues['debe'];
  42.                       Post;
  43.                     end;
  44.                 end;
  45.             end;
  46.           Next;
  47.         end;
  48.     End;
  49.  
  50. mes:=IntToStr(ComboBox1.ItemIndex+1);
  51. ano:=ComboBox2.Text;
  52. edit1.Text:='01'+'/'+mes+'/'+ano;
  53.  
  54. with Form45.Query1 do begin
  55.   Close;
  56.   SQL.Text := 'Select Fecha,grupo,des_cu,debe,haber '+
  57.             'from costosygastos.db '+
  58.             'where Extract(month from fecha) = '+IntToStr(MonthOf(StrToDate(Edit1.Text)))+
  59.             ' and Extract(year from fecha) = '+IntToStr(YearOf(StrToDate(Edit1.Text)));
  60.   Open;
  61. end;
  62. form45.QRLabel1.Caption:='Costos y Gastos de '+ComboBox1.Text+' de '+ComboBox2.Text;
  63. form45.QuickRep1.Preview;
  64. exit;
  65. end;




pero de todas formas gracias por su ayuda ;)
  • 0

#14 lKinGl

lKinGl

    Advanced Member

  • Moderador
  • PipPipPip
  • 118 mensajes
  • LocationVenezuela

Escrito 02 noviembre 2008 - 03:21

jojojo
  • 0