
Gabriel Cabral
Membros-
Total de itens
406 -
Registro em
-
Última visita
Tudo que Gabriel Cabral postou
-
Preciso fazer um relatório entre datas e ele deve ter uma condição para somar os valores de CAIENT quando o campo CAIDIN tiver o valor 'X' A parte de datas eu já resolvi...mas preciso de ajuda na parte da soma condicional, que não consigo de jeito nenhum.. Meu código está assim: procedure TfrmSenha.Button1Click(Sender: TObject); var totalDin : real; begin dm.RvPrjCaixa.SetParam('DataI',txtDataIni.Text); dm.RvPrjCaixa.SetParam('DataF',txtDataFin.Text); with dm.QueryRelCaixa do begin Close; SQL.Clear; SQL.Add('SELECT * FROM ESTACAI.dbf'); SQL.Add('WHERE CAIDAT BETWEEN :DataIni AND :DataFin'); ParamByName('DataIni').AsDateTime := StrToDateTime(txtDataIni.Text); ParamByName('DataFin').AsDateTime := StrToDateTime(txtDataFin.Text); Open; end; with dm.QueryRelCaixa do begin Close; SQL.Clear; SQL.Add('SELECT SUM(CAIENT) AS totalDin FROM ESTACAI.dbf'); SQL.Add('WHERE CAIDIN = "X"'); SQL.Add('AND CAIDAT BETWEEN :DataIni AND :DataFin'); ParamByName('DataIni').AsDateTime := StrToDateTime(txtDataIni.Text); ParamByName('DataFin').AsDateTime := StrToDateTime(txtDataFin.Text); Open; totalDin := dm.QueryRelCaixa['totalDin']; end; dm.RvPrjCaixa.SetParam('TotalDin',FloatToStr(totalDin)); } dm.RvPrjCaixa.ExecuteReport('rptCaixa'); end; Se eu executo apenas a parte das datas, o relatorio é exibido perfeitamente. Mas se eu for executar tambem a parte da somatória, acusa o seguinte erro 'QueryRelCaixa: Field 'CAIDAT' not found' Se eu tirar o CAIDAT, ele não vai encontrar o próximo campo da Query... Ou seja, ele não encontra os campos da query quando executo as duas buscas nela. alguém tem alguma solução ou uma outra maneira de fazer isso??? Agradeço qualquer ajuda!
-
Bom tarde.. Estou fazendo um relatorio em que um campo possui o valor 'X' e preciso que se o valor de dvCaixaCAIDIN for X, que apareça 'DINHEIRO' no relatorio, ao invés de X então coloquei uma condição no evento OnBeforePrint da Página do Relatório { Event for Page1.OnBeforePrint } function Page1_OnBeforePrint(Self: TRavePage); begin If dvCaixaCAIDIN.AsString = 'X' then dvCaixaCAIDIN.AsString = 'DINHEIRO'; end if; end OnBeforePrint; Mas continua aparecendo X no relatorio... esta condição está certa?? Está no evento certo?? Como posso fazer? obrigado
-
Existe alguma outra maneira de bloquear um combobox simples sem ter que utilizar a propriedade Enabled... Preciso de uma idêntica ao Read Only do DBComboBox... mas para o ComboBox simples não tem... e com o Enabled, as letras ficam cinzas e o cliente não quer isso.. Obrigado
-
Tenho um combobox simples que está carregado com o Nome de cada Fornecedor e uma DBEdit que armazena o Código do Fornecedor... Ao "navegar" pelos registros, com botões Primeiro, Próximo, etc.. o ComboBox simples precisa receber o nome do fornecedor de acordo com o código que está no DBEdit [vinculado com o banco]... Para realizar isso em um combo, fiz dessa maneira: with QueryCadProForn do begin Close; SQL.Clear; SQL.Add('SELECT FORFAN FROM FINAFOR.dbf'); SQL.Add('WHERE FORCOD = :pCOD'); ParambyName('pCOD').AsString := txtCadPro_AuxForn1.Text; Open; if not(IsEmpty) then begin cboCadPro_Forn1.Text := QueryCadProForn.FieldByName('FORFAN').AsString; end; end; Mas tenho mais de um combo para fazer isso...e cada um tem vinculado uma DBEdit diferente, com valores diferentes.. Dessa forma, o parâmetro não pode ser o mesmo para prencher todos os combos... Como devo fazer??? Devo limpar a query e fazer um SELECT por vez para cada combo?? Ou devo usar 4 TQuery diferentes?? Ou existe outra maneira?? Muito Obrigado. Gabriel Cabral
-
(Resolvido) Violação de acesso em busca por data
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Eu não acredito que era isso <_< O erro estava na query que eu estava chamando... eu estava chamando a query errada!!! Eu estava chamando a query que faz a busca com data ao invés de chamar a query para prencher os campos no outro formulario... enfim....no código abaixo, onde eu chamo QueryLocalControleCaixa, é pra chamar dm.QueryControleCaixa.. ... if GridLocalControleCaixa.Focused = True then begin With QueryLocalControleCaixa Do ////É PRA CHAMAR dm.QueryControleCaixa AO INVÉS DESTA begin Close; SQL.Clear; SQL.Add('SELECT * FROM ESTACAI.dbf'); SQL.Add('WHERE CAIDAT = :pData'); ParamByName('pData').AsDateTime := StrToDate(GridLocalControleCaixa.SelectedField.AsString); Open; ... Muito obrigado, Jhonas e Micheus -
(Resolvido) Violação de acesso em busca por data
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Jhonas, deu erro de violação de acesso denovo...só q agora com outro número... Project winsuperm.exe raised exception class EAccess Violation with message 'Access violation at address 004E9F18 in module 'winsuperm.exe'. Read of address 00000000' a caixa de mensagem nem chegou a ser exibida....já entrou o erro quando passava pela linha dela -
Bom dia, galera.. Problemão aqui... Estou fazendo uma busca através de uma data informada... A busca é feita e os dados são informados num grid até aí tudo certo.... Mas depois quando percorro o grid e escolho um registro e dou um Enter para os campos deste registro surgirem em um outro formulário, ocorre o seguinte erro de violação de acesso. Project winsuperm.exe raised exception class EAccess Violation with message 'Access violation at address 004E9ED1 in module 'winsuperm.exe'. Read of address 00000000' O código está desta maneira... procedure TfrmLocalControleCaixa.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var auxdata: TDate; begin if (Key = VK_DOWN) Then begin if txtLocalControleCaixa_Data.Focused = True then begin GridLocalControleCaixa.SetFocus; GridLocalControleCaixa.SelectedIndex := 0; end; end; if (Key = VK_RETURN) then begin if txtLocalControleCaixa_Data.Focused = True then begin if (StrToDateDef(txtLocalControleCaixa_Data.Text , 0 ) = 0 ) then begin Application.MessageBox('Data inválida!!! ', 'WINSUPERM', MB_ICONERROR); txtLocalControleCaixa_Data.SetFocus; txtLocalControleCaixa_Data.SelectAll; end else begin With QueryLocalControleCaixa Do begin Close; SQL.Clear; SQL.Add('SELECT * FROM ESTACAI.dbf'); SQL.Add('WHERE CAIDAT = :pData'); SQL.Add('ORDER BY CAIDAT DESC, CAIHOR DESC'); ParamByName('pData').AsDateTime := StrToDate(txtLocalControleCaixa_Data.Text); Open; //GridLocalControleCaixa.SetFocus; GridLocalControleCaixa.SelectedIndex := 0; end; end; end; if GridLocalControleCaixa.Focused = True then begin With QueryLocalControleCaixa Do begin Close; SQL.Clear; SQL.Add('SELECT * FROM ESTACAI.dbf'); SQL.Add('WHERE CAIDAT = :pData'); ////////////////////// LINHA QUE O ERRO ACUSA/////////////////////// ParamByName('pData').AsDateTime := StrToDate(GridLocalControleCaixa.SelectedField.AsString); ////////////////////// LINHA QUE O ERRO ACUSA/////////////////////// Open; if not(IsEmpty) then begin auxdata := dm.QueryControleCaixa.FieldByName('CAIDAT').AsDateTime; frmControleCaixa.txtControleCaixa_Data.Text := dm.QueryControleCaixa.FieldByName('CAIDAT').AsString; frmControleCaixa.txtControleCaixa_Hist.Text := dm.QueryControleCaixa.FieldByName('CAIHIS').AsString; frmControleCaixa.txtControleCaixa_Hora.Text := dm.QueryControleCaixa.FieldByName('CAIHOR').AsString; frmControleCaixa.txtControleCaixa_ValorEnt.Text := dm.QueryControleCaixa.FieldByName('CAIENT').AsString; frmControleCaixa.txtControleCaixa_ValorSai.Text := dm.QueryControleCaixa.FieldByName('CAISAI').AsString; frmControleCaixa.txtControleCaixa_Dinheiro.Text := dm.QueryControleCaixa.FieldByName('CAIDIN').AsString; frmControleCaixa.txtControleCaixa_CheVis.Text := dm.QueryControleCaixa.FieldByName('CAICHE').AsString; frmControleCaixa.txtControleCaixa_ChePre.Text := dm.QueryControleCaixa.FieldByName('CAIPRE').AsString; frmControleCaixa.txtControleCaixa_Cartao.Text := dm.QueryControleCaixa.FieldByName('CAICAR').AsString; frmControleCaixa.txtControleCaixa_Ticket.Text := dm.QueryControleCaixa.FieldByName('CAIOUT').AsString; frmControleCaixa.txtControleCaixa_EmAberto.Text := dm.QueryControleCaixa.FieldByName('CAIABE').AsString; end; end; txtLocalControleCaixa_Data.SetFocus; frmLocalControleCaixa.Close; frmControleCaixa.txtAuxData.Text := DateToStr(auxdata); end; end; end; A linha que o erro acusa é a ParamByName('pData').AsDateTime := StrToDate(GridLocalControleCaixa.SelectedField.AsString); O que está havendo?? alguém conseguiria me ajudar??? Muito obrigado
-
É que achei muito estranho... nem erro deu nem nada...só fechou mesmo vou verificar isso... mas se não for, você tem alguma outra sugestão do que possa ser?? Obrigado
-
Bom dia, pessoal... Tive um sério problema ontem.. Fui instalar o programa no computador do cliente, mas quando abro o executável, ele abre, fica menos de 1 segundo aberto e já fecha... O pior é que em outros computadores aqui do esrcitório ele abriu normal....no computador de casa tambem... é só no computador do cliente ¬¬ alguém já passou por isso?? Tem alguma coisa a dizer que possa me ajudar?! Para instalar o programa no pc do cliente, eu apenas instalei o BDE na máquina e copiei o executável pra lá, e na abertura do form principal, tem isto... //////////////////////////////////////////////////////////////////////////////// ////////// VERIFICA SE O BORLAND DATABASE ENGINE ESTA INSTALADO /////////// ////////// SE NÃO ESTIVER, INSTALA E REGISTRA /// (uses Registry) /// //////////////////////////////////////////////////////////////////////////////// procedure Verifica_BDE; const Key_Root = HKEY_LOCAL_MACHINE; Key_Data : Array[00..05, 01..03] Of String = (('Software\Borland\Database Engine', 'BDE_EXTERNAL', '0'), ('Software\Borland\Database Engine', 'DLLPATH' , '0'), ('Software\Borland\Database Engine', 'CONFIGFILE01', '1'), ('Software\Borland\BLW32' , 'BLAPIPATH' , '0'), ('Software\Borland\BLW32' , 'LOCALE_LIB1' , '5'), ('Software\Borland\BLW32' , 'LOCALE_LIB2' , '6')); BDE_Files : Array[01..10] Of String = ('idapi32.cfg', 'idapi32.dll', 'idr20009.dll', 'blw32.dll', 'usa.btl', 'europe.btl', 'idpdx32.dll', 'idasci32.dll', 'iddbas32.dll', 'idodbc32.dll'); var Status : Boolean; Index : Integer; Ind_Files : Integer; BDE_Dir : String; Registro : TRegIniFile; begin Try Registro := TRegIniFile.Create(); Registro.RootKey := Key_Root; If (Not Registro.KeyExists(Key_Data[0,1])) Or (( Registro.KeyExists(Key_Data[0,1])) And (Registro.ReadString(Key_Data[0,1], Key_Data[0,2], 'FALSE') = 'TRUE')) Then Begin For Index := 1 To 4 Do Begin Case Index Of 1 : BDE_Dir := ExtractFileDrive(ParamStr(0)) + '\BDE\'; 2 : BDE_Dir := ExtractFileDir(ParamStr(0)) + '\BDE\'; 3 : BDE_Dir := ExtractFilePath(ParamStr(0)); 4 : BDE_Dir := 'C:\Arquivos de Programas\Borland\Common Files\BDE\'; End; Status := DirectoryExists(BDE_Dir); If Status Then For Ind_Files := Low(BDE_Files) To High(BDE_Files) Do Status := Status And FileExists(BDE_Dir + BDE_Files[Ind_Files]); If Status Then Break; End; For Index := Succ(Low(Key_Data)) To High(Key_Data) Do Begin If Key_Data[Index,3] = '0' Then Registro.WriteString(Key_Data[Index,1], Key_Data[Index,2], BDE_Dir) Else Registro.WriteString(Key_Data[Index,1], Key_Data[Index,2], BDE_Dir + BDE_Files[StrToInt(Key_Data[Index,3])]); End; Registro.WriteString(Key_Data[0,1], Key_Data[0,2], 'TRUE'); End; Finally Registro.Free; End; end; //////////////////////////////////////////////////////////////////////////////// ///////////// CRIA UM ALIAS PARA UM BANCO DE DADOS NO BDE ////////////////// //////////////////////////////////////////////////////////////////////////////// procedure Cria_Alias(Parametros : Array Of Variant); var List_Aux : TStringList; begin If (Parametros[0] <> '') And (Parametros[1] <> '') Then Begin {Configura o parâmetro Local Share} { SetConfigParameter('\SYSTEM\INIT\;LOCAL SHARE' , 'FALSE'); {Configura o parâmetro Net Dir} { SetConfigParameter('\DRIVERS\PARADOX\INIT\;NET DIR', Parametros[1]); {Cria ou altera o Path do Alias} List_Aux := TStringList.Create; List_Aux.Clear; List_Aux.Add('PATH=' + Parametros[1]); If Not Session.IsAlias(Parametros[0]) Then Session.AddAlias(Parametros[0], 'PARADOX', List_Aux) Else Session.ModifyAlias(Parametros[0], List_Aux); Session.SaveConfigFile; List_Aux.Free; End; end; procedure TfrmSupermPrincipal.mnuCadProClick(Sender: TObject); begin frmCadPro.Show; end; procedure TfrmSupermPrincipal.mnuCadFornClick(Sender: TObject); begin frmCadForn.Show; end; procedure TfrmSupermPrincipal.mnuCadSecaoClick(Sender: TObject); begin frmCadSecao.Show; end; procedure TfrmSupermPrincipal.mnuCadCliClick(Sender: TObject); begin frmCadCli.Show; end; procedure TfrmSupermPrincipal.mnuCadOpeCxClick(Sender: TObject); begin frmCadOpeCx.Show; end; procedure TfrmSupermPrincipal.ControledeCaixa1Click(Sender: TObject); begin frmControleCaixa.Show; end; procedure TfrmSupermPrincipal.FormCreate(Sender: TObject); var cur_dir:string; begin cur_dir:=ExtractFileDir(ParamStr(0))+'\'; Verifica_BDE; Cria_Alias(['superm',cur_dir]); end; end. Se alguém conseguir me ajudar... pois só falta isso para o programa funcionar no cliente, e como ele já funcionou em outros computadores daqui, eu não sei o que está havendo :( Muito obrigado
-
Erro em alteração de registro buscado
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Certo, paulobergo, mas peguei uma encrenca e tenho q fazer esta aplicação usando tabela dbf.... e não sei como definir que tal campo não pode receber valor nulo... eu tentei definir isso com código em Delphi mesmo.....mas não consegui... por exemplo, uma certa data que não foi preenchida, quando eu ia inserir com insert into, dizia que ' / / ' não era uma data válida... então, eu limpava este campo antes de inserir no banco com .Clear aí falava q não aceitava valor nulo... era este meu problema... Eu gostaria muito de trabalhar apenas com instruções SQL para inserir, alterar, buscar e deletar; Enfim...para este meu caso de agora...o que voce sugere? que eu largue as TTables e mude tudo pra TQuery?? ou tem alguma outra boa solução pra pelos menos por enquanto?? Muito obrigado -
Erro em alteração de registro buscado
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Jhonas, este não é o erro.... este foi apenas um engano na escrita aqui no forum... é que eu tenho essas duas query's......mas uma não interfere na outra.... Este erro ocorre mesmo..... - ocorre pra QueryBuscaPro quando estou usando QueryBuscaPro [no cadastro de produtos] - ocorre pra QueryBuscaForn quando estou usando QueryBuscaForn [no cadastro de fornecedores] _____________________________________________________________ paulobergo, eu até comecei a utilizar só TQuery, sem DBEdit....só Edit's mesmo... mas tive vários problemas na inclusão de dados no banco.. Quando eu inseria dados com INSERT INTO, dava erro nos campos em branco, porque não podiam ficar nulos, por exemplo.. e eu não consegui resolver estes problemas[e como larguei, ainda não consigo, mas pretendo saber], então resolvi usar a TTable pra inserir, alterar e excluir.....e a Tquery apenas pra buscar um registro.... mas agora estou tendo conflito também... já não sei o que é melhor eu utilizar... -
Erro em alteração de registro buscado
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Era bem isso que eu estava tentando dizer... que eu fazia a busca com a Query mas editava os dados da tabela... enfim... fiz desse jeito que voce falou...editando a query... Mas quando clico pra alterar, acusa o erro... 'QueryBuscaForn: Cannot modify a read-only dataset'. Isso significa que eu posso alterar a query pra não ser 'somente leitura'?? e como eu faço isso?? pois a propriedade Read-only do dataset da query já está false!!! Obrigado -
Erro em alteração de registro buscado
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Então....a sql traz apenas 1 registro sempre... o q está correto.. Mas este não é o caso... eu preciso é saber como fazer com Select, essa busca q estou fazendo com Locate(). porque quando clico no alterar, que tem o comando TABLE.EDIT, ele quer alterar algo da tabela, mas se eu fizer a busca com a query, isso dá algum problema??? Não posso usar o Locate() porque a base de dados não é pequena -
Erro em alteração de registro buscado
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Então, Jhonas, o valor que aparece na caixa de mensagem é o mesmo que está na caixa de texto... então não sei porque quando clico no Alterar, a busca não é feita com ele... Mas eu tentei fazer a busca de outra forma aqui, e deu certo... Só que eu to fazendo com Locate(), e não sei se isso é muito aconselhável, né; Observe como estou fazendo... procedure TfrmCadPro.btnAlterarClick(Sender: TObject); var i: integer; begin if not (txtAuxCod.Text = '') then begin if dm.tblCadPro.Locate('PROCOD', txtAuxCod.Text, []) then begin if dm.tblCadPro.FieldByName('PROCOD').IsNull = False then begin txtCadPro_CodPro.Text := dm.tblCadPro.FieldByName('PROCOD').Value; end; if dm.tblCadPro.FieldByName('PROTIP').IsNull = False then begin cboCadPro_Secao.Text := dm.tblCadPro.FieldByName('PROTIP').Value; end; if dm.tblCadPro.FieldByName('PROCAD').IsNull = False then begin txtCadPro_DataCad.Text := dm.tblCadPro.FieldByName('PROCAD').Value; end; if dm.tblCadPro.FieldByName('PRODES').IsNull = False then begin txtCadPro_Desc.Text := dm.tblCadPro.FieldByName('PRODES').Value; end; if dm.tblCadPro.FieldByName('PROQTD').IsNull = False then begin txtCadPro_Estoque.Text := dm.tblCadPro.FieldByName('PROQTD').Value; end; if dm.tblCadPro.FieldByName('PROUND').IsNull = False then begin txtCadPro_UndVen.Text := dm.tblCadPro.FieldByName('PROUND').Value; end; if dm.tblCadPro.FieldByName('PROICM').IsNull = False then begin cboCadPro_Icms.Text := dm.tblCadPro.FieldByName('PROICM').Value; end; if dm.tblCadPro.FieldByName('PROMIN').IsNull = False then begin txtCadPro_EstMin.Text := dm.tblCadPro.FieldByName('PROMIN').Value; end; if dm.tblCadPro.FieldByName('PROMAX').IsNull = False then begin txtCadPro_EstMax.Text := dm.tblCadPro.FieldByName('PROMAX').Value; end; if dm.tblCadPro.FieldByName('PROCUS').IsNull = False then begin txtCadPro_PreCus.Text := dm.tblCadPro.FieldByName('PROCUS').Value; end; if dm.tblCadPro.FieldByName('PROLUC').IsNull = False then begin txtCadPro_Vml.Text := dm.tblCadPro.FieldByName('PROLUC').Value; end; if dm.tblCadPro.FieldByName('PROPRE').IsNull = False then begin txtCadPro_PreVen.Text := dm.tblCadPro.FieldByName('PROPRE').Value; end; if dm.tblCadPro.FieldByName('PROFOR').IsNull = False then begin cboCadPro_CodForn1.Text := dm.tblCadPro.FieldByName('PROFOR').Value; end; if dm.tblCadPro.FieldByName('PROFO2').IsNull = False then begin cboCadPro_CodForn2.Text := dm.tblCadPro.FieldByName('PROFO2').Value; end; if dm.tblCadPro.FieldByName('PROFO3').IsNull = False then begin cboCadPro_CodForn3.Text := dm.tblCadPro.FieldByName('PROFO3').Value; end; if dm.tblCadPro.FieldByName('PROFO4').IsNull = False then begin cboCadPro_CodForn4.Text := dm.tblCadPro.FieldByName('PROFO4').Value; end; if dm.tblCadPro.FieldByName('PROFRA').IsNull = False then begin txtCadPro_Fracao.Text := dm.tblCadPro.FieldByName('PROFRA').Value; end; if dm.tblCadPro.FieldByName('PROUNC').IsNull = False then begin txtCadPro_UndCompra.Text := dm.tblCadPro.FieldByName('PROUNC').Value; end; if dm.tblCadPro.FieldByName('PROLOC').IsNull = False then begin txtCadPro_Local.Text := dm.tblCadPro.FieldByName('PROLOC').Value; end; if dm.tblCadPro.FieldByName('PROCOT').IsNull = False then begin txtCadPro_Cotacao.Text := dm.tblCadPro.FieldByName('PROCOT').Value; end; if dm.tblCadPro.FieldByName('PROORI').IsNull = False then begin txtCadPro_CodOrigem.Text := dm.tblCadPro.FieldByName('PROORI').Value; end; if dm.tblCadPro.FieldByName('PROPES').IsNull = False then begin txtCadPro_ArqBal.Text := dm.tblCadPro.FieldByName('PROPES').Value; end; if dm.tblCadPro.FieldByName('PROUNP').IsNull = False then begin txtCadPro_PesUnd.Text := dm.tblCadPro.FieldByName('PROUNP').Value; end; if dm.tblCadPro.FieldByName('PRODVL').IsNull = False then begin txtCadPro_DiasVal.Text := dm.tblCadPro.FieldByName('PRODVL').Value; end; if dm.tblCadPro.FieldByName('PROBAL').IsNull = False then begin txtCadPro_BalCaixa.Text := dm.tblCadPro.FieldByName('PROBAL').Value; end; if dm.tblCadPro.FieldByName('PROPOF').IsNull = False then begin txtCadPro_PreOfe.Text := dm.tblCadPro.FieldByName('PROPOF').Value; end; if dm.tblCadPro.FieldByName('PROIOF').IsNull = False then begin txtCadPro_DataIniOfe.Text := dm.tblCadPro.FieldByName('PROIOF').Value; end; if dm.tblCadPro.FieldByName('PRODOF').IsNull = False then begin txtCadPro_DataFinOfe.Text := dm.tblCadPro.FieldByName('PRODOF').Value; end; if dm.tblCadPro.FieldByName('PROEPR').IsNull = False then begin txtCadPro_EstoqPrat.Text := dm.tblCadPro.FieldByName('PROEPR').Value; end; if dm.tblCadPro.FieldByName('PROPRT').IsNull = False then begin txtCadPro_QtdeMinPrat.Text := dm.tblCadPro.FieldByName('PROPRT').Value; end; if dm.tblCadPro.FieldByName('PROCOM').IsNull = False then begin txtCadPro_TotalComp.Text := dm.tblCadPro.FieldByName('PROCOM').Value; end; if dm.tblCadPro.FieldByName('PROVEN').IsNull = False then begin txtCadPro_TotalVend.Text := dm.tblCadPro.FieldByName('PROVEN').Value; end; if dm.tblCadPro.FieldByName('PRODTC').IsNull = False then begin txtCadPro_DataUlt.Text := dm.tblCadPro.FieldByName('PRODTC').Value; end; if dm.tblCadPro.FieldByName('PROFOC').IsNull = False then begin txtCadPro_FornUlt.Text := dm.tblCadPro.FieldByName('PROFOC').Value; end; if dm.tblCadPro.FieldByName('PROQDC').IsNull = False then begin txtCadPro_QtdeUlt.Text := dm.tblCadPro.FieldByName('PROQDC').Value; end; if dm.tblCadPro.FieldByName('PROPRC').IsNull = False then begin txtCadPro_PreUlt.Text := dm.tblCadPro.FieldByName('PROPRC').Value; end; if dm.tblCadPro.FieldByName('PROENT').IsNull = False then begin txtCadPro_DataEnt.Text := dm.tblCadPro.FieldByName('PROENT').Value; end; if dm.tblCadPro.FieldByName('PROQTE').IsNull = False then begin txtCadPro_QtdeEnt.Text := dm.tblCadPro.FieldByName('PROQTE').Value; end; if dm.tblCadPro.FieldByName('PROSAI').IsNull = False then begin txtCadPro_DataSai.Text := dm.tblCadPro.FieldByName('PROSAI').Value; end; if dm.tblCadPro.FieldByName('PROQTS').IsNull = False then begin txtCadPro_QtdeSai.Text := dm.tblCadPro.FieldByName('PROQTS').Value; end; end; end; // parte do codigo retirado temporariamente txtCadPro_AuxCodPro.Text := txtCadPro_CodPro.Text; dm.tblCadPro.Edit; end; Imagino que como seja um Locate na TABELA, e não um select na QUERY, esteja funcionando... mas nem sei se é por causa disso... Enfim....está funcionando, mas de um jeito não muito aconselhável... -
Erro em alteração de registro buscado
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Jhonas, esse problema de selecionar uma coisa e alterar outra se dá por que eu faço um Select com uma SQLQuery e depois pra alterar eu dou um tblCadPro.Edit??? ou seja...busco registro com query mas edito a tabela.... porque eu não consigo arranjar uma solução... até mesmo a q você falou, de guardar o codigo pra poder fazer a pesquisa dnovo... eu fiz o seguinte... faço a pesquisa, e o código do produto buscado eu armazeno em uma variável; e então, faço um TEdit do form de Cadastro receber o valor desta variável... procedure TfrmLocalPro.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var auxcod : string; begin if (txtLocalPro_CodPro.Focused = True) OR (txtLocalPro_Desc.Focused = True) OR (GridLocalPro.Focused = True) Then begin if (Key = VK_DOWN) Then begin GridLocalPro.SetFocus; GridLocalPro.SelectedIndex := 1; end; if (Key = VK_RETURN) Then begin GridLocalPro.SetFocus; GridLocalPro.SelectedIndex := 1; with dm.QueryBuscaPro do begin Close; SQL.Clear; SQL.Add('SELECT * FROM ESTAPRO.dbf'); SQL.Add('WHERE PRODES = :pDESC'); ParambyName('pDESC').AsString := GridLocalPro.SelectedField.AsString; Open; if not(IsEmpty) then begin auxcod := dm.QueryBuscaPro.FieldByName('PROCOD').AsString; frmCadPro.txtCadPro_CodPro .Text := dm.QueryBuscaPro.FieldByName('PROCOD').AsString; frmCadPro.cboCadPro_Secao .Text := dm.QueryBuscaPro.FieldByName('PROTIP').AsString; frmCadPro.txtCadPro_DataCad .Text := dm.QueryBuscaPro.FieldByName('PROCAD').AsString; frmCadPro.txtCadPro_Desc .Text := dm.QueryBuscaPro.FieldByName('PRODES').AsString; frmCadPro.txtCadPro_Estoque .Text := dm.QueryBuscaPro.FieldByName('PROQTD').AsString; frmCadPro.txtCadPro_UndVen .Text := dm.QueryBuscaPro.FieldByName('PROUND').AsString; frmCadPro.cboCadPro_Icms .Text := dm.QueryBuscaPro.FieldByName('PROICM').AsString; frmCadPro.txtCadPro_EstMin .Text := dm.QueryBuscaPro.FieldByName('PROMIN').AsString; frmCadPro.txtCadPro_EstMax .Text := dm.QueryBuscaPro.FieldByName('PROMAX').AsString; frmCadPro.txtCadPro_PreCus .Text := dm.QueryBuscaPro.FieldByName('PROCUS').AsString; frmCadPro.txtCadPro_Vml .Text := dm.QueryBuscaPro.FieldByName('PROLUC').AsString; frmCadPro.txtCadPro_PreVen .Text := dm.QueryBuscaPro.FieldByName('PROPRE').AsString; frmCadPro.cboCadPro_CodForn1 .Text := dm.QueryBuscaPro.FieldByName('PROFOR').AsString; frmCadPro.cboCadPro_CodForn2 .Text := dm.QueryBuscaPro.FieldByName('PROFO2').AsString; frmCadPro.cboCadPro_CodForn3 .Text := dm.QueryBuscaPro.FieldByName('PROFO3').AsString; frmCadPro.cboCadPro_CodForn4 .Text := dm.QueryBuscaPro.FieldByName('PROFO4').AsString; frmCadPro.txtCadPro_Fracao .Text := dm.QueryBuscaPro.FieldByName('PROFRA').AsString; frmCadPro.txtCadPro_UndCompra .Text := dm.QueryBuscaPro.FieldByName('PROUNC').AsString; frmCadPro.txtCadPro_Local .Text := dm.QueryBuscaPro.FieldByName('PROLOC').AsString; frmCadPro.txtCadPro_Cotacao .Text := dm.QueryBuscaPro.FieldByName('PROCOT').AsString; frmCadPro.txtCadPro_CodOrigem .Text := dm.QueryBuscaPro.FieldByName('PROORI').AsString; frmCadPro.txtCadPro_ArqBal .Text := dm.QueryBuscaPro.FieldByName('PROPES').AsString; frmCadPro.txtCadPro_PesUnd .Text := dm.QueryBuscaPro.FieldByName('PROUNP').AsString; frmCadPro.txtCadPro_DiasVal .Text := dm.QueryBuscaPro.FieldByName('PRODVL').AsString; frmCadPro.txtCadPro_BalCaixa .Text := dm.QueryBuscaPro.FieldByName('PROBAL').AsString; frmCadPro.txtCadPro_PreOfe .Text := dm.QueryBuscaPro.FieldByName('PROPOF').AsString; frmCadPro.txtCadPro_DataIniOfe .Text := dm.QueryBuscaPro.FieldByName('PROIOF').AsString; frmCadPro.txtCadPro_DataFinOfe .Text := dm.QueryBuscaPro.FieldByName('PRODOF').AsString; frmCadPro.txtCadPro_EstoqPrat .Text := dm.QueryBuscaPro.FieldByName('PROEPR').AsString; frmCadPro.txtCadPro_QtdeMinPrat .Text := dm.QueryBuscaPro.FieldByName('PROPRT').AsString; frmCadPro.txtCadPro_TotalComp .Text := dm.QueryBuscaPro.FieldByName('PROCOM').AsString; frmCadPro.txtCadPro_TotalVend .Text := dm.QueryBuscaPro.FieldByName('PROVEN').AsString; frmCadPro.txtCadPro_DataUlt .Text := dm.QueryBuscaPro.FieldByName('PRODTC').AsString; frmCadPro.txtCadPro_FornUlt .Text := dm.QueryBuscaPro.FieldByName('PROFOC').AsString; frmCadPro.txtCadPro_QtdeUlt .Text := dm.QueryBuscaPro.FieldByName('PROQDC').AsString; frmCadPro.txtCadPro_PreUlt .Text := dm.QueryBuscaPro.FieldByName('PROPRC').AsString; frmCadPro.txtCadPro_DataEnt .Text := dm.QueryBuscaPro.FieldByName('PROENT').AsString; frmCadPro.txtCadPro_QtdeEnt .Text := dm.QueryBuscaPro.FieldByName('PROQTE').AsString; frmCadPro.txtCadPro_DataSai .Text := dm.QueryBuscaPro.FieldByName('PROSAI').AsString; frmCadPro.txtCadPro_QtdeSai .Text := dm.QueryBuscaPro.FieldByName('PROQTS').AsString; end; end; // txtLocalPro_CodPro.SetFocus; frmLocalPro.Close; frmCadPro.txtAuxCod.Text := auxcod; end; end; end; Aí na hora de alterar, eu faço uma busca, só q agora com o código do produto buscado, que está no TEdit auxiliar, como parametro; fazendo povoar o restante dos TEdits com os campos deste registro... procedure TfrmCadPro.btnAlterarClick(Sender: TObject); var i: integer; begin with dm.QueryBuscaPro do begin Close; SQL.Clear; SQL.Add('SELECT * FROM ESTAPRO.dbf'); SQL.Add('WHERE PROCOD = :pCOD'); ParambyName('pCOD').AsString := txtAuxCod.Text; Open; if not(IsEmpty) then begin frmCadPro.txtCadPro_CodPro .Text := dm.QueryBuscaPro.FieldByName('PROCOD').AsString; frmCadPro.cboCadPro_Secao .Text := dm.QueryBuscaPro.FieldByName('PROTIP').AsString; frmCadPro.txtCadPro_DataCad .Text := dm.QueryBuscaPro.FieldByName('PROCAD').AsString; frmCadPro.txtCadPro_Desc .Text := dm.QueryBuscaPro.FieldByName('PRODES').AsString; frmCadPro.txtCadPro_Estoque .Text := dm.QueryBuscaPro.FieldByName('PROQTD').AsString; frmCadPro.txtCadPro_UndVen .Text := dm.QueryBuscaPro.FieldByName('PROUND').AsString; frmCadPro.cboCadPro_Icms .Text := dm.QueryBuscaPro.FieldByName('PROICM').AsString; frmCadPro.txtCadPro_EstMin .Text := dm.QueryBuscaPro.FieldByName('PROMIN').AsString; frmCadPro.txtCadPro_EstMax .Text := dm.QueryBuscaPro.FieldByName('PROMAX').AsString; frmCadPro.txtCadPro_PreCus .Text := dm.QueryBuscaPro.FieldByName('PROCUS').AsString; frmCadPro.txtCadPro_Vml .Text := dm.QueryBuscaPro.FieldByName('PROLUC').AsString; frmCadPro.txtCadPro_PreVen .Text := dm.QueryBuscaPro.FieldByName('PROPRE').AsString; frmCadPro.cboCadPro_CodForn1 .Text := dm.QueryBuscaPro.FieldByName('PROFOR').AsString; frmCadPro.cboCadPro_CodForn2 .Text := dm.QueryBuscaPro.FieldByName('PROFO2').AsString; frmCadPro.cboCadPro_CodForn3 .Text := dm.QueryBuscaPro.FieldByName('PROFO3').AsString; frmCadPro.cboCadPro_CodForn4 .Text := dm.QueryBuscaPro.FieldByName('PROFO4').AsString; frmCadPro.txtCadPro_Fracao .Text := dm.QueryBuscaPro.FieldByName('PROFRA').AsString; frmCadPro.txtCadPro_UndCompra .Text := dm.QueryBuscaPro.FieldByName('PROUNC').AsString; frmCadPro.txtCadPro_Local .Text := dm.QueryBuscaPro.FieldByName('PROLOC').AsString; frmCadPro.txtCadPro_Cotacao .Text := dm.QueryBuscaPro.FieldByName('PROCOT').AsString; frmCadPro.txtCadPro_CodOrigem .Text := dm.QueryBuscaPro.FieldByName('PROORI').AsString; frmCadPro.txtCadPro_ArqBal .Text := dm.QueryBuscaPro.FieldByName('PROPES').AsString; frmCadPro.txtCadPro_PesUnd .Text := dm.QueryBuscaPro.FieldByName('PROUNP').AsString; frmCadPro.txtCadPro_DiasVal .Text := dm.QueryBuscaPro.FieldByName('PRODVL').AsString; frmCadPro.txtCadPro_BalCaixa .Text := dm.QueryBuscaPro.FieldByName('PROBAL').AsString; frmCadPro.txtCadPro_PreOfe .Text := dm.QueryBuscaPro.FieldByName('PROPOF').AsString; frmCadPro.txtCadPro_DataIniOfe .Text := dm.QueryBuscaPro.FieldByName('PROIOF').AsString; frmCadPro.txtCadPro_DataFinOfe .Text := dm.QueryBuscaPro.FieldByName('PRODOF').AsString; frmCadPro.txtCadPro_EstoqPrat .Text := dm.QueryBuscaPro.FieldByName('PROEPR').AsString; frmCadPro.txtCadPro_QtdeMinPrat .Text := dm.QueryBuscaPro.FieldByName('PROPRT').AsString; frmCadPro.txtCadPro_TotalComp .Text := dm.QueryBuscaPro.FieldByName('PROCOM').AsString; frmCadPro.txtCadPro_TotalVend .Text := dm.QueryBuscaPro.FieldByName('PROVEN').AsString; frmCadPro.txtCadPro_DataUlt .Text := dm.QueryBuscaPro.FieldByName('PRODTC').AsString; frmCadPro.txtCadPro_FornUlt .Text := dm.QueryBuscaPro.FieldByName('PROFOC').AsString; frmCadPro.txtCadPro_QtdeUlt .Text := dm.QueryBuscaPro.FieldByName('PROQDC').AsString; frmCadPro.txtCadPro_PreUlt .Text := dm.QueryBuscaPro.FieldByName('PROPRC').AsString; frmCadPro.txtCadPro_DataEnt .Text := dm.QueryBuscaPro.FieldByName('PROENT').AsString; frmCadPro.txtCadPro_QtdeEnt .Text := dm.QueryBuscaPro.FieldByName('PROQTE').AsString; frmCadPro.txtCadPro_DataSai .Text := dm.QueryBuscaPro.FieldByName('PROSAI').AsString; frmCadPro.txtCadPro_QtdeSai .Text := dm.QueryBuscaPro.FieldByName('PROQTS').AsString; end; end; cboCadPro_Secao.Items.Clear; dm.tblCadSecao.First; while dm.tblCadSecao.Eof = False do begin cboCadPro_Secao.Items.Add(dm.tblCadSecao.FieldByName('TIPNOM').AsString); dm.tblCadSecao.next; end; cboCadPro_CodForn1.Items.Clear; cboCadPro_CodForn2.Items.Clear; cboCadPro_CodForn3.Items.Clear; cboCadPro_CodForn4.Items.Clear; dm.tblCadForn.First; while dm.tblCadForn.Eof = False do begin cboCadPro_CodForn1.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); cboCadPro_CodForn2.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); cboCadPro_CodForn3.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); cboCadPro_CodForn4.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); dm.tblCadForn.next; end; txtCadPro_Mode.Caption := 'MODO ALTERAÇÃO'; txtCadPro_CodPro.SetFocus; if not (txtCadPro_CodPro.Text = '') then begin for i:=1 to txtCadPro_CodPro.MaxLength - length(txtCadPro_CodPro.Text) do txtCadPro_CodPro.Text := '0' + txtCadPro_CodPro.Text; end; txtCadPro_AuxCodPro.Text := txtCadPro_CodPro.Text; dm.tblCadPro.Edit; end; mas não é isso q acontece.... ocorre a mesma coisa que antes... o que eu posso fazer??? você conseguiria me explicar com mais detalhes? [mais detalhes ainda?? desculpa, mas não estou conseguindo mesmo fazer isso] Obrigado -
E ae galera... to precisando dmais de uma ajuda porque não tenho noção do que está acontecendo... já tentei de tudo aqui... é o seguinte... Em um cadastro de produtos, "ando" até o terceiro registro [Refrigerante, por exemplo] Tenho uma tela de busca...entro nessa tela e busco o produto Abacaxi, após encontrado, os dados desse registro são levados à tela de cadastro para serem alterados...desta forma: procedure TfrmLocalPro.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (txtLocalPro_CodPro.Focused = True) OR (txtLocalPro_Desc.Focused = True) OR (GridLocalPro.Focused = True) Then begin if (Key = VK_DOWN) Then begin GridLocalPro.SetFocus; GridLocalPro.SelectedIndex := 1; end; if (Key = VK_RETURN) Then begin GridLocalPro.SetFocus; GridLocalPro.SelectedIndex := 1; with dm.QueryBuscaPro do begin Close; SQL.Clear; SQL.Add('SELECT * FROM ESTAPRO.dbf'); SQL.Add('WHERE PRODES = :pDESC'); ParambyName('pDESC').AsString := GridLocalPro.SelectedField.AsString; Open; if not(IsEmpty) then begin frmCadPro.txtCadPro_CodPro .Text := dm.QueryBuscaPro.FieldByName('PROCOD').AsString; frmCadPro.cboCadPro_Secao .Text := dm.QueryBuscaPro.FieldByName('PROTIP').AsString; frmCadPro.txtCadPro_DataCad .Text := dm.QueryBuscaPro.FieldByName('PROCAD').AsString; frmCadPro.txtCadPro_Desc .Text := dm.QueryBuscaPro.FieldByName('PRODES').AsString; frmCadPro.txtCadPro_Estoque .Text := dm.QueryBuscaPro.FieldByName('PROQTD').AsString; frmCadPro.txtCadPro_UndVen .Text := dm.QueryBuscaPro.FieldByName('PROUND').AsString; frmCadPro.cboCadPro_Icms .Text := dm.QueryBuscaPro.FieldByName('PROICM').AsString; frmCadPro.txtCadPro_EstMin .Text := dm.QueryBuscaPro.FieldByName('PROMIN').AsString; frmCadPro.txtCadPro_EstMax .Text := dm.QueryBuscaPro.FieldByName('PROMAX').AsString; frmCadPro.txtCadPro_PreCus .Text := dm.QueryBuscaPro.FieldByName('PROCUS').AsString; frmCadPro.txtCadPro_Vml .Text := dm.QueryBuscaPro.FieldByName('PROLUC').AsString; frmCadPro.txtCadPro_PreVen .Text := dm.QueryBuscaPro.FieldByName('PROPRE').AsString; frmCadPro.cboCadPro_CodForn1 .Text := dm.QueryBuscaPro.FieldByName('PROFOR').AsString; frmCadPro.cboCadPro_CodForn2 .Text := dm.QueryBuscaPro.FieldByName('PROFO2').AsString; frmCadPro.cboCadPro_CodForn3 .Text := dm.QueryBuscaPro.FieldByName('PROFO3').AsString; frmCadPro.cboCadPro_CodForn4 .Text := dm.QueryBuscaPro.FieldByName('PROFO4').AsString; frmCadPro.txtCadPro_Fracao .Text := dm.QueryBuscaPro.FieldByName('PROFRA').AsString; frmCadPro.txtCadPro_UndCompra .Text := dm.QueryBuscaPro.FieldByName('PROUNC').AsString; frmCadPro.txtCadPro_Local .Text := dm.QueryBuscaPro.FieldByName('PROLOC').AsString; frmCadPro.txtCadPro_Cotacao .Text := dm.QueryBuscaPro.FieldByName('PROCOT').AsString; frmCadPro.txtCadPro_CodOrigem .Text := dm.QueryBuscaPro.FieldByName('PROORI').AsString; frmCadPro.txtCadPro_ArqBal .Text := dm.QueryBuscaPro.FieldByName('PROPES').AsString; frmCadPro.txtCadPro_PesUnd .Text := dm.QueryBuscaPro.FieldByName('PROUNP').AsString; frmCadPro.txtCadPro_DiasVal .Text := dm.QueryBuscaPro.FieldByName('PRODVL').AsString; frmCadPro.txtCadPro_BalCaixa .Text := dm.QueryBuscaPro.FieldByName('PROBAL').AsString; frmCadPro.txtCadPro_PreOfe .Text := dm.QueryBuscaPro.FieldByName('PROPOF').AsString; frmCadPro.txtCadPro_DataIniOfe .Text := dm.QueryBuscaPro.FieldByName('PROIOF').AsString; frmCadPro.txtCadPro_DataFinOfe .Text := dm.QueryBuscaPro.FieldByName('PRODOF').AsString; frmCadPro.txtCadPro_EstoqPrat .Text := dm.QueryBuscaPro.FieldByName('PROEPR').AsString; frmCadPro.txtCadPro_QtdeMinPrat .Text := dm.QueryBuscaPro.FieldByName('PROPRT').AsString; frmCadPro.txtCadPro_TotalComp .Text := dm.QueryBuscaPro.FieldByName('PROCOM').AsString; frmCadPro.txtCadPro_TotalVend .Text := dm.QueryBuscaPro.FieldByName('PROVEN').AsString; frmCadPro.txtCadPro_DataUlt .Text := dm.QueryBuscaPro.FieldByName('PRODTC').AsString; frmCadPro.txtCadPro_FornUlt .Text := dm.QueryBuscaPro.FieldByName('PROFOC').AsString; frmCadPro.txtCadPro_QtdeUlt .Text := dm.QueryBuscaPro.FieldByName('PROQDC').AsString; frmCadPro.txtCadPro_PreUlt .Text := dm.QueryBuscaPro.FieldByName('PROPRC').AsString; frmCadPro.txtCadPro_DataEnt .Text := dm.QueryBuscaPro.FieldByName('PROENT').AsString; frmCadPro.txtCadPro_QtdeEnt .Text := dm.QueryBuscaPro.FieldByName('PROQTE').AsString; frmCadPro.txtCadPro_DataSai .Text := dm.QueryBuscaPro.FieldByName('PROSAI').AsString; frmCadPro.txtCadPro_QtdeSai .Text := dm.QueryBuscaPro.FieldByName('PROQTS').AsString; end; end; // txtLocalPro_CodPro.SetFocus; frmLocalPro.Close; end; end; end; Mas quando clico em Alterar, o registro que abre para ser alterado é o último que estava lá....o do Refrigerante!!!! É como se a busca não tivesse sido feita!!! É como se os dados do registro do Abacaxi estivessem lá, mas o registro que realmente está é o do Refrigerante!!! A alteração é feita dessa forma: procedure TfrmCadPro.btnAlterarClick(Sender: TObject); var i: integer; begin //desbloquear campos txtCadPro_CodPro .ReadOnly := False; cboCadPro_Secao .ReadOnly := False; txtCadPro_DataCad .ReadOnly := False; txtCadPro_Desc .ReadOnly := False; txtCadPro_Estoque .ReadOnly := False; txtCadPro_UndVen .ReadOnly := False; cboCadPro_Icms .ReadOnly := False; txtCadPro_EstMin .ReadOnly := False; txtCadPro_EstMax .ReadOnly := False; txtCadPro_PreCus .ReadOnly := False; txtCadPro_Vml .ReadOnly := False; txtCadPro_PreVen .ReadOnly := False; cboCadPro_CodForn1 .ReadOnly := False; cboCadPro_CodForn2 .ReadOnly := False; cboCadPro_CodForn3 .ReadOnly := False; cboCadPro_CodForn4 .ReadOnly := False; txtCadPro_Fracao .ReadOnly := False; txtCadPro_UndCompra .ReadOnly := False; txtCadPro_Local .ReadOnly := False; txtCadPro_CodOrigem .ReadOnly := False; txtCadPro_DiasVal .ReadOnly := False; txtCadPro_PreOfe .ReadOnly := False; txtCadPro_DataIniOfe .ReadOnly := False; txtCadPro_DataFinOfe .ReadOnly := False; txtCadPro_EstoqPrat .ReadOnly := False; txtCadPro_QtdeMinPrat .ReadOnly := False; txtCadPro_TotalComp .ReadOnly := False; txtCadPro_TotalVend .ReadOnly := False; txtCadPro_DataUlt .ReadOnly := False; txtCadPro_FornUlt .ReadOnly := False; txtCadPro_QtdeUlt .ReadOnly := False; txtCadPro_PreUlt .ReadOnly := False; txtCadPro_DataEnt .ReadOnly := False; txtCadPro_QtdeEnt .ReadOnly := False; txtCadPro_DataSai .ReadOnly := False; txtCadPro_QtdeSai .ReadOnly := False; txtAux .ReadOnly := False; btnNovo .Enabled := False; btnGravar .Enabled := True; btnAlterar .Enabled := False; btnExcluir .Enabled := False; btnBuscar .Enabled := False; btnPrimeiro .Enabled := False; btnAnterior .Enabled := False; btnProximo .Enabled := False; btnUltimo .Enabled := False; btnSair .Enabled := True; //deixar que o campo receba o foco com o Tab txtCadPro_CodPro .TabStop := True; cboCadPro_Secao .TabStop := True; txtCadPro_DataCad .TabStop := True; txtCadPro_Desc .TabStop := True; txtCadPro_Estoque .TabStop := True; txtCadPro_UndVen .TabStop := True; cboCadPro_Icms .TabStop := True; txtCadPro_EstMin .TabStop := True; txtCadPro_EstMax .TabStop := True; txtCadPro_PreCus .TabStop := True; txtCadPro_Vml .TabStop := True; txtCadPro_PreVen .TabStop := True; cboCadPro_CodForn1 .TabStop := True; cboCadPro_CodForn2 .TabStop := True; cboCadPro_CodForn3 .TabStop := True; cboCadPro_CodForn4 .TabStop := True; txtCadPro_Fracao .TabStop := True; txtCadPro_UndCompra .TabStop := True; txtCadPro_Local .TabStop := True; FrameConEstoq .TabStop := True; ProEstSim .TabStop := True; ProEstNao .TabStop := True; FrameCotacao .TabStop := True; ProCotSim .TabStop := True; ProCotNao .TabStop := True; txtCadPro_CodOrigem .TabStop := True; FrameBalanca .TabStop := True; ProPesSim .TabStop := True; ProPesNao .TabStop := True; FramePesUnd .TabStop := True; ProUnpPeso .TabStop := True; ProUnpUnidade .TabStop := True; txtCadPro_DiasVal .TabStop := True; FrameBalancaCaixa .TabStop := True; ProBalSim .TabStop := True; ProBalNao .TabStop := True; txtCadPro_PreOfe .TabStop := True; txtCadPro_DataIniOfe .TabStop := True; txtCadPro_DataFinOfe .TabStop := True; txtCadPro_EstoqPrat .TabStop := True; txtCadPro_QtdeMinPrat .TabStop := True; txtCadPro_TotalComp .TabStop := True; txtCadPro_TotalVend .TabStop := True; FrameUltCompra .TabStop := True; txtCadPro_DataUlt .TabStop := True; txtCadPro_FornUlt .TabStop := True; txtCadPro_QtdeUlt .TabStop := True; txtCadPro_PreUlt .TabStop := True; FrameUltMovEst .TabStop := True; txtCadPro_DataEnt .TabStop := True; txtCadPro_QtdeEnt .TabStop := True; txtCadPro_DataSai .TabStop := True; txtCadPro_QtdeSai .TabStop := True; txtAux .TabStop := True; FrameConEstoq .Enabled := True; FrameCotacao .Enabled := True; FrameBalanca .Enabled := True; FramePesUnd .Enabled := True; FrameBalancaCaixa .Enabled := True; cboCadPro_Secao.Items.Clear; dm.tblCadSecao.First; while dm.tblCadSecao.Eof = False do begin cboCadPro_Secao.Items.Add(dm.tblCadSecao.FieldByName('TIPNOM').AsString); dm.tblCadSecao.next; end; cboCadPro_CodForn1.Items.Clear; cboCadPro_CodForn2.Items.Clear; cboCadPro_CodForn3.Items.Clear; cboCadPro_CodForn4.Items.Clear; dm.tblCadForn.First; while dm.tblCadForn.Eof = False do begin cboCadPro_CodForn1.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); cboCadPro_CodForn2.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); cboCadPro_CodForn3.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); cboCadPro_CodForn4.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); dm.tblCadForn.next; end; txtCadPro_Mode.Caption := 'MODO ALTERAÇÃO'; txtCadPro_CodPro.SetFocus; if not (txtCadPro_CodPro.Text = '') then begin for i:=1 to txtCadPro_CodPro.MaxLength - length(txtCadPro_CodPro.Text) do txtCadPro_CodPro.Text := '0' + txtCadPro_CodPro.Text; end; txtCadPro_AuxCodPro.Text := txtCadPro_CodPro.Text; dm.tblCadPro.Edit; end; alguém saberia me ajudar, dizendo como eu faço pra buscar um registro e alterar este registro encontrado, e não o que já estava na tela de cadastro???!!! Muito Obrigado
-
Então, Jhonas e Micheus.. eu experimentei todos esses exemplos para validar a data, mas todos caem na mesma mensagem de erro de conversão... Project winsuperm.exe raised exception class EconvertError with message '33/22/1111' is not a valid date'. É claro q vai dar erro na conversão quando eu digito uma data inválida...mas queria tratar isso, para o programa não encerrar, mas cair na caixa de mensagem que eu fiz. Como eu faria isso??? E isso só funciona com MaskEdit??? ou funciona com DBEdit também??? porque aqui é um DBEdit....e o campo tem a propriedade EditMask como !99/99/9999;1; isso interfere em alguma coisa??? porque a caixa de msg do programa não aparece de jeito nenhum quando a data é inválida.. SEMPRE dá a mensagem do Delphi. =/ Obrigado
-
Boa tarde, galera.. olha...eu sei q já existe um monte de tópico auqi sobre isso.... mas não consegui encontrar nenhum q conseguiu me ajudar.. é o seguinte... estou tentando validar a data deste jeito: procedure TfrmCadCli.txtCadCli_DataNascExit(Sender: TObject); var Data: TDate; begin Data := StrToDate(txtCadCli_DataNasc.Text); if not (txtCadCli_DataNasc.Text = ' / / ') then begin [red]if not IsDate(Data) then[/red] begin Application.MessageBox('Data inválida!!! ', 'WINSUPERM', MB_ICONEXCLAMATION); txtCadCli_DataNasc.SetFocus; end; end; end; mas sempre dá o erro na linha q está em vermelho, dizendo: [Error] U_frmCadCli.pas(1448): Undeclared identifier: 'IsDate' qual pode ser o problema aí?? Muito Obrigado
-
(Resolvido) DBCombos interligados
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Consegui, galera.... acho que depois dessas duas semaninhas de férias, eu voltei com todo gás :lol: ficou dessa maneira.. procedure TfrmCadPro.cboCadPro_CodForn1Enter(Sender: TObject); begin cboCadPro_CodForn1.Items.Clear; dm.tblCadForn.First; while not (dm.tblCadForn.Eof) do begin if (cboCadPro_CodForn2.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) and (cboCadPro_CodForn3.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) and (cboCadPro_CodForn4.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) then begin cboCadPro_CodForn1.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); dm.tblCadForn.next; end else dm.tblCadForn.next; end; end; procedure TfrmCadPro.cboCadPro_CodForn2Enter(Sender: TObject); begin cboCadPro_CodForn2.Items.Clear; dm.tblCadForn.First; while not (dm.tblCadForn.Eof) do begin if (cboCadPro_CodForn1.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) and (cboCadPro_CodForn3.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) and (cboCadPro_CodForn4.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) then begin cboCadPro_CodForn2.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); dm.tblCadForn.next; end else dm.tblCadForn.next; end; end; procedure TfrmCadPro.cboCadPro_CodForn3Enter(Sender: TObject); begin cboCadPro_CodForn3.Items.Clear; dm.tblCadForn.First; while not (dm.tblCadForn.Eof) do begin if (cboCadPro_CodForn1.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) and (cboCadPro_CodForn2.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) and (cboCadPro_CodForn4.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) then begin cboCadPro_CodForn3.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); dm.tblCadForn.next; end else dm.tblCadForn.next; end; end; procedure TfrmCadPro.cboCadPro_CodForn4Enter(Sender: TObject); begin cboCadPro_CodForn4.Items.Clear; dm.tblCadForn.First; while not (dm.tblCadForn.Eof) do begin if (cboCadPro_CodForn1.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) and (cboCadPro_CodForn2.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) and (cboCadPro_CodForn3.text <> dm.tblCadForn.FieldByName('FORCOD').AsString) then begin cboCadPro_CodForn4.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); dm.tblCadForn.next; end else dm.tblCadForn.next; end; end; Muito obrigado!!! -
(Resolvido) DBCombos interligados
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Porque preciso escolher 4 fornecedores diferentes!!! -
Bom dia galera é o seguinte... em um cadastro de produtos, tenho 4 DBCombos para selecionar os códigos dos fornecedores para popular esses dbcombos com os códigos dos registros da tabela de fornecedores, faço da seguinte maneira: cboCadPro_CodForn1.Items.Clear; cboCadPro_CodForn2.Items.Clear; cboCadPro_CodForn3.Items.Clear; cboCadPro_CodForn4.Items.Clear; dm.tblCadForn.First; while dm.tblCadForn.Eof = False do begin cboCadPro_CodForn1.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); cboCadPro_CodForn2.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); cboCadPro_CodForn3.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); cboCadPro_CodForn4.Items.Add(dm.tblCadForn.FieldByName('FORCOD').AsString); dm.tblCadForn.next; Mas, supondo que existam os códigos 00001, 00002, 00003 e 00004 Se eu selecionar o 00001 no CodForn1, ele não pode estar nos outros dbcombos.. aí se eu selecionar 00003 no CodForn2, ele não pode estar nos outros dbcombos.. e assim por diante... alguém consegue me ajudar?? alguma dica?? Obrigado
-
(Resolvido) Caso especial de geração de código
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Jhonas, encontrei uma outra solução, que funciona muito bem também.... é só modificar a instrução sql para SELECT MAX (PROCOD) FROM ESTAPRO.dbf WHERE PROCOD < 7890000000000 Muito obrigado de qualquer forma Feliz 2009! -
Bom dia, galera... Preciso de uma ajuda de voces em relação à geração de código.... num cadastro de produtos, faço a geração de código dessa forma if not dm.tblCadPro.FieldByName('PROCOD').IsNull then Exit; dm.QueryMaxPro.DatabaseName := dm.tblCadPro.DatabaseName; dm.QueryMaxPro.SQL.Clear; dm.QueryMaxPro.SQL.Add('SELECT MAX (PROCOD) FROM ESTAPRO.dbf'); dm.QueryMaxPro.Open; try dm.tblCadPro.FieldByName('PROCOD').AsString := FormatFloat('0000000000000', StrToFloat(dm.QueryMaxPro.Fields[0].AsString)+1); finally dm.QueryMaxPro.Close; end; Então, em uma tabela vazia, os registros terão os códigos nessa ordem: 0000000000001, 0000000000002, 0000000000003... Mas esses códigos gerados servem apenas para produtos sem código de barras [hortifrutti, por exemplo]. Supondo que o próximo produto cadastrado seja um com código de barras [7896065880106, por exemplo]; o código gerado será 0000000000004, então o usuário fará a alteração para 7896065880106. Mas o código gerado do próximo produto a ser cadastrado, que teria que ser 0000000000004, será 7896065880107!!!!! O que se deve fazer para evitar este conflito??? alguém conseguiria me ajudar??? Uma idéia seria percorrer os registros em ordem decrescente, até encontrar o primeiro número que não comece por 789, para pegá-lo e somar +1 Mas não tenho ideia de como posso fazer isso.. alguém conseguiria me ajudar nisso??? Ou teria alguma outra forma de fazer isso??? Por favor, me ajudem se puderem.....seria um ótimo presente de Natal!!! Obrigado Bom Natal a todos!!!
-
Manter caixa de mensagem em cima do form
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Certo, Micheus.....entendi....muito obrigado Ficou dessa forma procedure TfrmCadForn.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); with Params do begin ExStyle := ExStyle OR WS_EX_APPWINDOW; WndParent := Application.Handle; end; end; -
Manter caixa de mensagem em cima do form
pergunta respondeu ao Gabriel Cabral de Gabriel Cabral em Delphi, Kylix
Ninguém conseguiria me ajudar mesmo??? Por que isso acontece??? Ninguém passou por isso alguma vez??? Se eu não utilizar os comandos para um form abrir na barra de tarefas, a caixa de mensagem aparece normalmente em cima dele... Mas eu preciso deixar esses forms abertos na barra de tarefas!!!