Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wilke1

nesse loop

Recommended Posts

ola pessoal e esse loop ele ta dando esse error 'Qrypromotor:dataset not in edit or insert', voces tem alguma ideia de como eu posso resolver.estou fazendo assimif QryDivisaoENTRE.RecordCount > 1 then begin IF (QRYPROMOTORFORNEC.STATE = DSINSERT) THEN BEGIN While not QryDivisaoentre.eof do begin QRYPROMOTORFORNEC.FieldByName('CD_PROMOTOR').AsString:=codpromotor; QRYPROMOTORFORNEC.FIELDBYNAME('CD_FORNECEDOR').AsString:=fornecpromotor; QRYPROMOTORFORNEC.FIELDBYNAME('CD_DIVISAO').AsString:=QrydivisaoENTRE.FieldByName('CD_DIVISAO').AsString; QRYPROMOTORFORNEC.ApplyUpdates; QRYPROMOTORFORNEC.CommitUpdates; Qrydivisaoentre.Next; end; end;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai dar erro, pq você verifica se ela esta em inserção, entra no while, da um post e depois não coloca novamente em edit.

marcio ainda continua o mesmo error, estou utilizando um updatesql, será que pode ser ele?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas vai sempre continuar o erro, se você deixar no while desta forma vai ocorrer, visto que a primeira vez vai funcionar, mas depois não vai mais, pois você já efetuou o post sobre a tabela, e quando for para a segunda vez a query não esta nem em inserção e nem em edição, gerando assim o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas vai sempre continuar o erro, se você deixar no while desta forma vai ocorrer, visto que a primeira vez vai funcionar, mas depois não vai mais, pois você já efetuou o post sobre a tabela, e quando for para a segunda vez a query não esta nem em inserção e nem em edição, gerando assim o erro.

estou fazendo assim if QryDivisaoENTRE.RecordCount > 1 then begin While not QryDivisaoentre.eof do begin QRYPROMOTORFORNEC.FieldByName('CD_PROMOTOR').AsString:=Qrypromotores.FieldByName('cd_promotor').AsString; QRYPROMOTORFORNEC.FIELDBYNAME('CD_FORNECEDOR').AsString:=Qrymostrafornecedores.FieldByName('cd_fornecedor').AsString; QRYPROMOTORFORNEC.FIELDBYNAME('CD_DIVISAO').AsString:=QrydivisaoENTRE.FieldByName('CD_DIVISAO').AsString; QRYPROMOTORFORNEC.post; Qrydivisaoentre.Next; end;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja que você ficar executando .POST no final, e antes fica atribuíndo valores aos campos, é preciso que antes ainda, logo após o begin do while tenha a edição ou a inserção do registro na query, ou seja, qry.Insert ou qry.Edit, para que consiga atribuir os campos e depois salvar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

ola pessoal e esse loop ele ta dando esse error 'Qrypromotor:dataset not in edit or insert', voces tem alguma ideia de como eu posso resolver.estou fazendo assimif QryDivisaoENTRE.RecordCount > 1 then begin IF (QRYPROMOTORFORNEC.STATE = DSINSERT) THEN BEGIN While not QryDivisaoentre.eof do begin QRYPROMOTORFORNEC.FieldByName('CD_PROMOTOR').AsString:=codpromotor; QRYPROMOTORFORNEC.FIELDBYNAME('CD_FORNECEDOR').AsString:=fornecpromotor; QRYPROMOTORFORNEC.FIELDBYNAME('CD_DIVISAO').AsString:=QrydivisaoENTRE.FieldByName('CD_DIVISAO').AsString; QRYPROMOTORFORNEC.ApplyUpdates; QRYPROMOTORFORNEC.CommitUpdates; Qrydivisaoentre.Next; end; end;end;

eu fiz assim e deu certo. IF (QRYPROMOTORFORNEC.STATE = DSINSERT) THEN BEGIN While not QryDivisaoentre.eof do begin QRYPROMOTORFORNEC.Close; QRYPROMOTORFORNEC.SQL.Clear; QRYPROMOTORFORNEC.SQL.Add('INSERT INTO TB_PROMOTORES_FORNEC'); QRYPROMOTORFORNEC.SQL.ADD('(CD_PROMOTOR,CD_FORNECEDOR,CD_DIVISAO)'); QRYPROMOTORFORNEC.SQL.Add('VALUES(:CODPROMOTOR,:CODFORNECEDOR,:CODDIVISAO)'); QRYPROMOTORFORNEC.ParamByName('CODPROMOTOR').Value:=Qrypromotores.FieldByName('cd_promotor').AsString; QRYPROMOTORFORNEC.ParamByName('CODFORNECEDOR').Value:=Qrymostrafornecedores.FieldByName('cd_fornecedor').AsString; QRYPROMOTORFORNEC.ParamByName('CODDIVISAO').Value:= QrydivisaoENTRE.FieldByName('CD_DIVISAO').AsString; QRYPROMOTORFORNEC.ExecSQL; Qrydivisaoentre.Next; end; end;marcio estou com outra duvida eo seguinte na hora de incluir outro promotor ele dar error ora-00001dizendo que ja foi inserido o codigo, tem como eu evitar isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria que fazer antes uma consulta para ver se o mesmo já não esta inserido.

Resolvidoeu fiz assim e deu certoif QryDivisao.RecordCount > 1 then begin IF (QRYPROMOTORFORNEC.STATE = DSINSERT) THEN BEGIN While not QryDivisao.eof do begin QRYPROMOTORFORNEC.FieldByName('CD_PROMOTOR').ASINTEGER := Qrypromotores.FieldByName('CD_PROMOTOR').AsInteger; QRYPROMOTORFORNEC.FIELDBYNAME('CD_FORNECEDOR').ASSTRING := QrymostraFornecedores.FieldByName('CD_FORNECEDOR').AsString; QRYPROMOTORFORNEC.FIELDBYNAME('CD_DIVISAO').ASSTRING := Qrydivisao.FieldByName('CD_DIVISAO').AsString; QRYPROMOTORFORNEC.Post; QRYPROMOTORFORNEC.Edit; QRYPROMOTORFORNEC.ApplyUpdates; QRYPROMOTORFORNEC.CommitUpdates; QRYPROMOTORFORNEC.Append; Qrydivisao.Next; end; end;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.