Inserção de dados
15/09/2004
0
Desde já, agradeço a todos vcs.
ps.: Utilizo Delphi7 + Firebird1.5 + DBExpress( Sqldataset, datasetprovider, clientdataset e sqlclientdataset).
[color=darkred:42b428e5da]//rotina
procedure TfrmCertificado.btn_setorClick(Sender: TObject);
begin
inherited;
if Dts.State=dsinactive then
begin
MessageDlg(´Oh! meu Deus, USUARIO COM PROBLEMA DE B-I-O-S !!!É preciso adicionar um novo, ou abrir um certificado antes de continuar!!!´,mtinformation,[mbok],0);
exit;
end;
frmLocalizar:=TfrmLocalizar.Create(self,dmdados.sqlcds_procura_prodcert);
frmLocalizar.btn_procurar.Click;
try
if Frmlocalizar.ShowModal=mrOk then
begin
if Dts.State=dsbrowse then
dmdados.cds_certificados.Edit;
dmdados.cds_certificadosPRODUTO.AsInteger:=dmdados.sqlcds_procura_prodcertCODIGO.AsInteger;
dmdados.cds_certificadosDESENHO.AsString:=dmdados.sqlcds_procura_prodcertDESENHO.AsString;
dmdados.cds_certificadosNOME_PRODUTO.AsString:=dmdados.sqlcds_procura_prodcertDESCRICAO.AsString;
dmdados.cds_certificadosMATPRIMA.AsInteger:=dmdados.sqlcds_procura_prodcertMATPRIMA.AsInteger;
dmdados.cds_certificadosNOME_MATERIAPRIMA.AsString:=dmdados.sqlcds_procura_prodcertNOME_MATERIAPRIMA.AsString;
dmdados.cds_certificadosCLIENTE.AsInteger:=dmdados.sqlcds_procura_prodcertCLIENTE.AsInteger;
dmdados.cds_certificadosNOME_CLIENTE.AsString:=dmdados.sqlcds_procura_prodcertNOME_CLIENTE.AsString;
end;
// rotina para inserir itens de controle do certificado
dmdados.cds_itensdecontrole.Close;
dmdados.cds_itensdecontrole.Params[1].AsInteger:=dmdados.cds_certificadosPRODUTO.AsInteger;
dmdados.cds_itensdecontrole.Open;
While not dmdados.cds_itensdecontrole.Eof do
begin
dmdados.cds_itenscertificado.Close;
dmdados.cds_itenscertificado.Open;
dmdados.cds_itenscertificado.Insert;
dmdados.cds_itenscertificadoCODIGO.Value:=dmdados.cds_itensdecontroleCODIGO.Value;
dmdados.cds_itenscertificadoPRODUTO.Value:=dmdados.cds_itensdecontrolePRODUTO.Value;
dmdados.cds_itenscertificadoCARACTERISTICA.Value:=dmdados.cds_itensdecontroleCARACTERISTICA.Value;
dmdados.cds_itenscertificadoESPECIFICACAO.Value:=dmdados.cds_itensdecontroleESPECIFICACAO.value;
dmdados.cds_itenscertificado.Post;
dmdados.cds_itensdecontrole.Next;
end;
dmdados.sqlcds_lista_itensdecontrole.Open;
// fim da rotina acima
finally
dmdados.sqlcds_procura_produtos.close;
Frmlocalizar.Free;
end;
end;
//fim da rotina[/color:42b428e5da]
Programalista
Posts
15/09/2004
Vinicius2k
Neste trecho :
... // rotina para inserir itens de controle do certificado ... dmdados.cds_itensdecontrole.Params[1].AsInteger:=dmdados.cds_certificadosPRODUTO.AsInteger; ...
Se este é o único parametro do cds_itenscontrole use :
...Params[0].AsInteger...
ou
...Params.ParamByName(´nome_do_parametro´).AsInteger...
[b:b774d27651]Lembre-se ![/b:b774d27651] Os elementos do Array Params (e de quase todos os outros arrays definidos como propriedade) iniciam a contagem em [b:b774d27651]Zero[/b:b774d27651].
Espero ter ajudado...
T+
15/09/2004
Programalista
Continuo aguardando alguma outra solução.
15/09/2004
Vinicius2k
Que eu saiba, só existem duas possiblidades para este problema, e ambas relacionadas aos parametros, a primeira é seu nome e a segunda seu tipo de dado...
Já que não é a primeira, verifique o tipo de dado da coluna no Banco de Dados e o tipo de dado do parametro... no caso, vc está passando este parametro como [b:216388a3ba]Intege[/b:216388a3ba]r, o [b:216388a3ba]DataType[/b:216388a3ba] deste parametro está definido como [b:216388a3ba]ftInteger[/b:216388a3ba] ?
Faça esta verificação com os demais parametros, se existirem...
T+
16/09/2004
Programalista
[color=darkred:81c24a50e0]procedure TfrmCertificado.btn_ProdutoClick(Sender: TObject);
begin
inherited;
if Dts.State=dsinactive then
begin
MessageDlg(´É preciso adicionar um novo, ou abrir um certificado antes de continuar!!!´,mtinformation,[mbok],0);
exit;
end;
frmLocalizar:=TfrmLocalizar.Create(self,dmdados.sqlcds_procura_prodcert);
frmLocalizar.btn_procurar.Click;
try
if Frmlocalizar.ShowModal=mrOk then
begin
if Dts.State=dsbrowse then
dmdados.cds_certificados.Edit;
dmdados.cds_certificadosPRODUTO.AsInteger:=dmdados.sqlcds_procura_prodcertCODIGO.AsInteger;
dmdados.cds_certificadosDESENHO.AsString:=dmdados.sqlcds_procura_prodcertDESENHO.AsString;
dmdados.cds_certificadosNOME_PRODUTO.AsString:=dmdados.sqlcds_procura_prodcertDESCRICAO.AsString;
dmdados.cds_certificadosMATPRIMA.AsInteger:=dmdados.sqlcds_procura_prodcertMATPRIMA.AsInteger;
dmdados.cds_certificadosNOME_MATERIAPRIMA.AsString:=dmdados.sqlcds_procura_prodcertNOME_MATERIAPRIMA.AsString;
dmdados.cds_certificadosCLIENTE.AsInteger:=dmdados.sqlcds_procura_prodcertCLIENTE.AsInteger;
dmdados.cds_certificadosNOME_CLIENTE.AsString:=dmdados.sqlcds_procura_prodcertNOME_CLIENTE.AsString;
// rotina para inserir itens de controle do certificado
dmdados.cds_itensdecontrole.close;
dmdados.cds_itensdecontrole.Params.ParamByName(´PRODUTO´).AsInteger:=dmdados.sqlcds_procura_prodcertCODIGO.AsInteger;
dmdados.cds_itensdecontrole.Open;
While not dmdados.cds_itensdecontrole.Eof do
begin
dmdados.cds_itenscertificado.Close;
dmdados.cds_itenscertificado.Open;
dmdados.cds_itenscertificado.insert;
dmDados.cds_itenscertificadoCODIGO.Value:=dmdados.cds_itensdecontroleCODIGO.Value;
dmdados.cds_itenscertificadoCERTIFICADO.Value:=dmDados.cds_certificadosCODIGO.Value;
dmdados.cds_itenscertificadoPRODUTO.Value:=dmdados.cds_itensdecontrolePRODUTO.Value;
dmdados.cds_itenscertificadoCARACTERISTICA.Value:=dmdados.cds_itensdecontroleCARACTERISTICA.Value;
dmdados.cds_itenscertificadoESPECIFICACAO.Value:=dmdados.cds_itensdecontroleESPECIFICACAO.value;
dmdados.cds_itenscertificado.Post;
dmdados.cds_itensdecontrole.Next;
end;
dmdados.sqlcds_lista_itenscertificado.Close;
dmdados.sqlcds_lista_itenscertificado.Params.ParamByName(´PRODUTO´).Value:=dmdados.cds_certificadosPRODUTO.Value;
dmdados.sqlcds_lista_itenscertificado.Open;
// fim da rotina para inserir os itens de controle do certificado
end;
finally
dmdados.sqlcds_procura_produtos.close;
Frmlocalizar.Free;
end;
end;[/color:81c24a50e0]
16/09/2004
Vinicius2k
A princípio, nada me parece de errado nas rotinas de inserção, mas neste trecho :
... if Dts.State=dsbrowse then dmdados.cds_certificados.Edit; ...
Como vc tem várias ações que devem ser tomadas baseadas neste desvio (if) vc precisa delimitá-las com begin...end;
Veja :
procedure TfrmCertificado.btn_ProdutoClick(Sender: TObject); begin inherited; if Dts.State=dsinactive then begin MessageDlg(´É preciso adicionar um novo, ou abrir um certificado antes de continuar!!!´,mtinformation,[mbok],0); exit; end; frmLocalizar:=TfrmLocalizar.Create(self,dmdados.sqlcds_procura_prodcert); frmLocalizar.btn_procurar.Click; try if Frmlocalizar.ShowModal=mrOk then begin if Dts.State=dsbrowse then begin with dmdados do begin cds_certificados.Edit; cds_certificadosPRODUTO.AsInteger:= sqlcds_procura_prodcertCODIGO.AsInteger; cds_certificadosDESENHO.AsString:= sqlcds_procura_prodcertDESENHO.AsString; cds_certificadosNOME_PRODUTO.AsString:= sqlcds_procura_prodcertDESCRICAO.AsString; cds_certificadosMATPRIMA.AsInteger:= sqlcds_procura_prodcertMATPRIMA.AsInteger; cds_certificadosNOME_MATERIAPRIMA.AsString:= sqlcds_procura_prodcertNOME_MATERIAPRIMA.AsString; cds_certificadosCLIENTE.AsInteger:= sqlcds_procura_prodcertCLIENTE.AsInteger; cds_certificadosNOME_CLIENTE.AsString:= sqlcds_procura_prodcertNOME_CLIENTE.AsString; // rotina para inserir itens de controle do certificado cds_itensdecontrole.close; cds_itensdecontrole.Params.ParamByName(´PRODUTO´).AsInteger:=dmdados.sqlcds_procura_prodcertCODIGO.AsInteger; cds_itensdecontrole.Open; while not cds_itensdecontrole.Eof do begin cds_itenscertificado.Close; cds_itenscertificado.Open; cds_itenscertificado.insert; cds_itenscertificadoCODIGO.Value:= cds_itensdecontroleCODIGO.Value; cds_itenscertificadoCERTIFICADO.Value:= cds_certificadosCODIGO.Value; cds_itenscertificadoPRODUTO.Value:= cds_itensdecontrolePRODUTO.Value; cds_itenscertificadoCARACTERISTICA.Value:= cds_itensdecontroleCARACTERISTICA.Value; cds_itenscertificadoESPECIFICACAO.Value:= cds_itensdecontroleESPECIFICACAO.value; cds_itenscertificado.Post; cds_itensdecontrole.Next; end; sqlcds_lista_itenscertificado.Close; sqlcds_lista_itenscertificado.Params.ParamByName(´PRODUTO´).Value:= cds_certificadosPRODUTO.Value; sqlcds_lista_itenscertificado.Open; // fim da rotina para inserir os itens de controle do certificado end; end; end; finally dmdados.sqlcds_procura_produtos.close; Frmlocalizar.Free; end; end;
Veja se este é o problema....
:idea: Dica : ao postar um código utilize as tags ...{/code}*
* O correto é [ -- colchetes, mas usei chaves para poder exemplificar...
Usando as tags facilita a vida de quem quer lhe ajudar... :wink:
T+
Clique aqui para fazer login e interagir na Comunidade :)