Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
adriano_servitec Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Mar 08, 2010 8:49 pm Assunto: Problema com insert e não descobri o porque? **Resolvido** |
|
|
Pessoal, não consigo detectar o motivo que ao aplicar o append do dataset ele não abre um novo insert na tabela, somente consigo abrir um insert se eu apertar novamente no btn_insert
O código é simples
Código: | procedure Tfrmcadordserv.btninsertClick(Sender: TObject);
begin
tabsheet2.TabVisible := true;
tabsheet2.Show;
//inclui
ordemserv.Append;
buscaid; //procedure para identificar a ID do cliente
edtgen.text := varid; //joga o ID para uma variavel global
//este comando UpdateRecord é muito importante na lista para pegar a ID da tabela mestre
// deve ficar depois que cria a variavel do ID
ordemserv.UpdateRecord; // este comando serve para atualizar a tabela pai
// assim posso incluir dados na tabela filho com
// a referencia da tabela pai.
dslocal.dataset.FieldByName('emissao').asstring := datetostr(now);
dslocal.dataset.FieldByName('horaemissao').asstring := timetostr(Time);
dslocal.dataset.FieldByName('despacho').asstring := '';//datetostr(now);
dslocal.dataset.FieldByName('horadespacho').asstring := ''; //timetostr(Time);
pendente.ItemIndex := 0;
cbclientes.Enabled := True;
cbclientes.SetFocus; //entra em foco
//mostra os componentes em atividades
cbcentrocusto.visible := true;
dbcentrocusto.visible := false;
//limpa os captions dos labels
lblcliente.Caption := '';
lblendereco.Caption := '';
lbltelefone.Caption := '';
lblbairro.Caption := '';
lblcidade.Caption := '';
lbluf.Caption := '';
aberto.Enabled := true;
fechado.Enabled := true;
aberto.Checked := true;
//Todo: se for utilizar um Radiogroup usar o codigo abaixo
//TRadioButton(RadioGroup1.Controls[1]). Enabled := False;
//Para mudar a coluna do radiogroup lado a lado mudar a propriedade columns = 2
end; |
Ja debuguei e vi que entra na linha do append, mais não sei o pq ele ignora esta linha pois não entra em insert logo na primeira vez que executo o comando, somente na segunda vez. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Editado pela última vez por adriano_servitec em Seg Mar 08, 2010 10:06 pm, num total de 1 vez |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
rafmattos Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Seg Mar 08, 2010 9:02 pm Assunto: |
|
|
o que esse buscaid, será q ele nao ta tirando sua tabela do mode de insert
ou
da uma olhada tb se nao tem nada no BeforeInsert do componente de dados |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
adriano_servitec Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Mar 08, 2010 9:14 pm Assunto: |
|
|
rafmattos escreveu: | o que esse buscaid, será q ele nao ta tirando sua tabela do mode de insert
ou
da uma olhada tb se nao tem nada no BeforeInsert do componente de dados | Ola amigo, esta procedure é apenas para buscar o generators
Código: | procedure Tfrmcadordserv.buscaid;
begin
with qrylocal do
begin
Sql.Clear;
Sql.Add('SELECT * FROM SP_NEWCOD(''ORDEMSERV'')');
Open;
end;
varid := inttostr(qrylocal.FieldByName('CODIGO').AsInteger);
end; |
Também não estou usando nada no evento entes do insert do dataset.
Percebi que o problema esta ao entrar no foco do dbedit, e não é somente no foco deste dbedit Código: | cbclientes.SetFocus; //entra em foco |
É em qualquer foco dos componentes dbedits ligados a este dataset
Todos eles fugam em um groupbox, mais não tem enhum evento que trata neste groupbox, e também nenhum evento no dataset ligado a estes dbedits nem nos eventos do datasource. Não sei o que esta havendo amigo.
Obrigado... _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
gilsonnrodrigues Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Seg Mar 08, 2010 9:15 pm Assunto: |
|
|
buscaid; //procedure para identificar a ID do cliente
edtgen.text := varid; //joga o ID para uma variavel global
não seria melhor
o buscaID ser uma function q ja retornava o valor?
em vez de colocar numa global "problemática" e "insegura" |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
gilsonnrodrigues Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Seg Mar 08, 2010 9:16 pm Assunto: |
|
|
usaria assim:
//buscaid; //procedure para identificar a ID do cliente
edtgen.text := buscaid;
apesar q o correto mesmo era
OrdemServCampo.Value := buscaid; |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
gilsonnrodrigues Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Seg Mar 08, 2010 9:19 pm Assunto: |
|
|
Código: | function Tfrmcadordserv.buscaid : Integer;
begin
with qrylocal do
begin
Sql.Clear;
Sql.Add('SELECT * FROM SP_NEWCOD(''ORDEMSERV'')');
Open;
end;
Result := qrylocal.FieldByName('CODIGO').AsInteger;
end; |
fala sério!!!!
variavel global é pro pessoal q não sabe pra serve o Result, Return, "returning values", etc. |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
adriano_servitec Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
gilsonnrodrigues Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Seg Mar 08, 2010 9:35 pm Assunto: |
|
|
ordemserv.Append;
...
...
ordemserv.UpdateRecord;//achei estranho
se tirar essa linha? |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
adriano_servitec Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Mar 08, 2010 9:40 pm Assunto: |
|
|
gilsonnrodrigues escreveu: | ordemserv.Append;
...
...
ordemserv.UpdateRecord;//achei estranho
se tirar essa linha? | Gilson, se eu tirar o UpdateRecord não consigo levar a ID da tabela mestre na tabela detalhe.
Vou explicar o que estou fazendo
Tenho um form de ordem de serviço, aonde ao clicar no botão insert deve montar o cabeçalho, ai devo escolher um cliente, assim que escolher passo para a grid aonde tem os serviços que fica em uma tabela detalhe, mais como ainda não gravei esta ordem e amarro a IDOrdem com a tabela detalhe somente com o uso do UpdateRecord é que posso fazer isso sem precisar gravar a tabela mestre primeiro para depois começar a usar a tabela detalhe.
Mesmo assim comentei a linha que vc referiu, e nada, apesar de eu ja usar desta maneira a muito tempo. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
gilsonnrodrigues Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Seg Mar 08, 2010 9:45 pm Assunto: |
|
|
vai "debugando".
coloque showmessage mostrando o estado e veja onde muda |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
adriano_servitec Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Mar 08, 2010 9:52 pm Assunto: |
|
|
gilsonnrodrigues escreveu: | vai "debugando".
coloque showmessage mostrando o estado e veja onde muda | Pior que nem se em que linha debugar, pois no codigo acima ja fiz o teste colocando em um bloco assim
Código: | tabsheet2.TabVisible := true;
tabsheet2.Show;
//inclui
ordemserv.Append;
if ordemserv.state in [dsinsert] then
begin
ordemservIDORDEM.AsInteger := buscaid; //procedure para identificar a ID do cliente
// edtgen.text := varid; //joga o ID para uma variavel global
//este comando UpdateRecord é muito importante na lista para pegar a ID da tabela mestre
// deve ficar depois que cria a variavel do ID
ordemserv.UpdateRecord; // este comando serve para atualizar a tabela pai
// assim posso incluir dados na tabela filho com
// a referencia da tabela pai.
dslocal.dataset.FieldByName('emissao').asstring := datetostr(now);
dslocal.dataset.FieldByName('horaemissao').asstring := timetostr(Time);
dslocal.dataset.FieldByName('despacho').asstring := '';//datetostr(now);
dslocal.dataset.FieldByName('horadespacho').asstring := ''; //timetostr(Time);
pendente.ItemIndex := 0;
cbclientes.Enabled := True;
// cbclientes.SetFocus; //entra em foco
//mostra os componentes em atividades
cbcentrocusto.visible := true;
dbcentrocusto.visible := false;
//limpa os captions dos labels
lblcliente.Caption := '';
lblendereco.Caption := '';
lbltelefone.Caption := '';
lblbairro.Caption := '';
lblcidade.Caption := '';
lbluf.Caption := '';
aberto.Enabled := true;
fechado.Enabled := true;
aberto.Checked := true;
//Todo: se for utilizar um Radiogroup usar o codigo abaixo
//TRadioButton(RadioGroup1.Controls[1]). Enabled := False;
//Para mudar a coluna do radiogroup lado a lado mudar a propriedade columns = 2}
end; | E vi que não é ai o problema, pois até ai abre o insert, o problema esta quando entro em foco em qualquer um dos dbedits ligados a este dataset, é como se desse um cancel e ficasse com a tabela aberta no primeiro registro da tabela.
Ai ja olhei se tem algum ponto nestes locais para dar um F5 e debugar, mais não tem nenhum evento em nenhum deles que contém codigo. Ai fico sem saber o que esta me causando isso. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
adriano_servitec Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Mar 08, 2010 10:02 pm Assunto: |
|
|
gilsonnrodrigues e rafmattos, achei aonde estava fazendo isso, era no evento onshow do tabsheet2, esqueci deste evento. Já arrumei
Estas duas procedures que retornavam ao estado do primeiro registro
Código: | //---------------------------------------------------
// Procedure para sincronizar dois dataset's no zeos
// Um dataset possui joins e outro o cabeçalho da OS
//---------------------------------------------------
procedure Tfrmcadordserv.Sincronizar_DataSet;
begin
with ordemserv do
begin
close;
sql.clear;
sql.add (' select * from ordemserv ');
sql.add (' where idordem = :busca ');
ParamByName('busca').AsInteger := DBgrid2.Fields[3].AsInteger; // Pega o valor da coluna do dbgrid
open;
mostracadclie;
movimento;
end;
end; |
Código: | procedure Tfrmcadordserv.mostracadclie;
begin
//todo:verificar pq do erro
//traz o resultado no caption cfe os campos
lblcliente.Caption := dbcliente.text;
lblendereco.Caption := dbendereco.Text;
lbltelefone.Caption := dbtelefone.Text;
lblbairro.caption := dbbairro.Text;
lblcidade.Caption := dbcidade.Text;
lbluf.caption := dbuf.Text;
cbcentrocusto.visible := false;
dbcentrocusto.Visible := true;
dbcentrocusto.Top := 150;
end;
|
Agora tratei o estado no evento onshow deste tabsheet
Código: | [code]if ordemserv.state in [dsedit, dsbrowse] then
begin
Sincronizar_DataSet;
mostracadclie;
end; [/code] | Assim quando o estado estiver em modo insert ignora as duas procedures.
Realmente passei despercebido deste evento. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
gilsonnrodrigues Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Seg Mar 08, 2010 10:17 pm Assunto: |
|
|
é por isso q "odeio" esses eventos.
rsrs.
to bincando.
mas eles são mt bons pra vc controlar o visual.
negocio, eles fazem confusão. |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
adriano_servitec Colaborador
![Colaborador Colaborador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/colaborador.gif)
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Mar 08, 2010 10:24 pm Assunto: |
|
|
Citação: | variavel global é pro pessoal q não sabe pra serve o Result, Return, "returning values", etc. | Eu sou uma destas pessoas...Não que eu não saiba pra que serve o return da função, mais pq não sabia que variavel global é tão problemático. Na empresa que eu trabalho meu patrão odeia que eu use variavel global (mais também nunca me disse opq, apenas pede pra usar as funções da empresa), mais lá ja temos uma LIB muito boa que faz N coisas que não precisa de variaveis, mais aqui em casa como não tenho muitas funções e não sei criar muito bem novas funções, então parto para variaveis, só não sabia desta fama que elas tem. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
gilsonnrodrigues Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Mar 09, 2010 10:09 am Assunto: |
|
|
mas não há o q saber se vc sabeusar função.
vamos lá!!!
exemplo:
Código: | procedure Soma(var1, var2 : Integer);
begin
varGlobalSoma := Var1 + Var2;
end; |
Código: | soma(10, 15);
mostraMensagem(intToStr(varGlobalSoma ));//mas td mundo pode alterar essa varGlobalSoma inclusive essa MostraMensagem.
|
agora imagine vc usar assim:
Código: | function Soma(var1, var2 : Integer) : Integer;
begin
Result := Var1 + Var2;
end; |
Código: | mostraMensagem(intToStr(soma(10, 15)));// não fica mais bonitinho |
não tem segredo não. é só desentoxixar das globais. |
|
Voltar ao Topo |
|
![](templates/subSilver/images/spacer.gif) |
|