Erro 0 records updating
25/04/2013
0
Boa tarde,
Utilizo o delphi 7 e recentemente atualizei o zeiolib para versao 7.0.3, porem, me deparei com erro que na versao anterior do zeos 6.6.6 funciona perfeitamente.
Explicando:
em minha aplicacao tenho uma rotina para pegar todos os itens dos menus para fazer a liberacao de acesso aos usuarios cadastrados. Nessa tela inclui dois datasource (ds_usuario e ds_usuarioacesso), dois zquery (db_usuario e db_usuarioacesso). O db_usuario nao liguei em nenhum datasource, somente sql (SELECT * FROM USUARIOS ORDER BY NOME), ja o db_usuarioacesso liguei ao ds_usuario e a instrucao sql (SELECT * FROM USUARIOS_ACESSO WHERE CODIGO = :CODIGO ORDER BY CODIGO). Com isso ao selecionar o usuario aparece os acessos ao qual este usuario tem permissao.
Na aba permissao de acesso tenho um botao de 'autorizacoes', onde ao clicar recria todos os direitos de acesso gravando os menus do sistema. A rotina é a seguinte:
procedure TFrmUsuario.PngBtnRecriarClick(Sender: TObject);
var
i, y, z : integer;
ListaB : TStringList;
begin
if MessageDlg('Esse processo irá recriar todos os direitos de acesso aos Menus do sistema, continuar?',mtConfirmation,[mbYes,mbNo],0) = mrNo then
exit;
ListBox1.clear;
// grava opcoes do dxbar e dxitemlinks para liberacao de acesso
DB_UsuarioAcesso.close;
DB_UsuarioAcesso.open;
DS_UsuarioAcesso.AutoEdit := true;
DB_UsuarioAcesso.first;
while not DB_UsuarioAcesso.eof do
DB_UsuarioAcesso.Delete;
ListBox1.items := RecriaPermissao();
Memo1.Clear;
for i := 0 to (ListBox1.Count-1) do
begin
Memo1.lines.add( Trim(Copy(ListBox1.Items.Strings[i],1,40)) + ' *** ' + Trim(Copy(ListBox1.Items.Strings[i],43,70)) );
DB_UsuarioAcesso.append;
DB_UsuarioAcesso.FieldByName('MENU').AsString := DeletaCaract(Trim(Copy(ListBox1.Items.Strings[i],1,40)), '&' );
DB_UsuarioAcesso.FieldByName('MENU_NAME').AsString := UpperCase(Trim(Copy(ListBox1.Items.Strings[i],43,70)));
DB_UsuarioAcesso.FieldByName('MENU_ACESSAR').AsString := 'N';
//* neste ponto caso encontrar um menu em branco grava uma linha somente com o codigo usuario e menu_acessar recebe 0 (zero) ao inves de 'S' ou 'N'.
if (DB_UsuarioAcesso.FieldByName('MENU').AsString = '') then
DB_UsuarioAcesso.FieldByName('MENU_ACESSAR').AsString := '0';
DB_UsuarioAcesso.Post;
DB_UsuarioAcesso.CommitUpdates;
end;
DB_UsuarioAcesso.close;
DB_UsuarioAcesso.open;
// repetir
DB_UsuarioAcesso.close;
DB_UsuarioAcesso.open;
DS_UsuarioAcesso.AutoEdit := true;
DB_UsuarioAcesso.first;
while not DB_UsuarioAcesso.eof do
DB_UsuarioAcesso.Delete;
ListBox1.items := RecriaPermissao();
Memo1.Clear;
for i := 0 to (ListBox1.Count-1) do
begin
Memo1.lines.add( Trim(Copy(ListBox1.Items.Strings[i],1,40)) + ' *** ' + Trim(Copy(ListBox1.Items.Strings[i],43,70)) );
DB_UsuarioAcesso.append;
DB_UsuarioAcesso.FieldByName('MENU').AsString := DeletaCaract(Trim(Copy(ListBox1.Items.Strings[i],1,40)), '&' );
DB_UsuarioAcesso.FieldByName('MENU_NAME').AsString := UpperCase(Trim(Copy(ListBox1.Items.Strings[i],43,70)));
DB_UsuarioAcesso.FieldByName('MENU_ACESSAR').AsString := 'N';
//* neste ponto caso encontrar um menu em branco grava uma linha somente com o codigo usuario e menu_acessar recebe 0 (zero) ao inves de 'S' ou 'N'.
if (DB_UsuarioAcesso.FieldByName('MENU').AsString = '') then
DB_UsuarioAcesso.FieldByName('MENU_ACESSAR').AsString := '0';
DB_UsuarioAcesso.Post;
DB_UsuarioAcesso.CommitUpdates;
end;
DB_UsuarioAcesso.close;
DS_UsuarioAcesso.AutoEdit := False;
DB_UsuarioAcesso.open;
end;
Porem, ao final nao esta gravando a parte *, caso o menu seja branco grava registro somente com codigo usuario e menu_acessar 0 (zero) e da o seguinte erro:
9 record(s) update . only one record should have been updated.
o que pode esta acontecendo? pode ser um bug da zeoslib versao 7.0.3 visto que na versao 6.6.6 funciona normalmente....
Precisava migrar para versao 7 que tem protocolo firebird 2.5.
alguem poderia me ajudar, desde ja agradeco......
obgdo.
Utilizo o delphi 7 e recentemente atualizei o zeiolib para versao 7.0.3, porem, me deparei com erro que na versao anterior do zeos 6.6.6 funciona perfeitamente.
Explicando:
em minha aplicacao tenho uma rotina para pegar todos os itens dos menus para fazer a liberacao de acesso aos usuarios cadastrados. Nessa tela inclui dois datasource (ds_usuario e ds_usuarioacesso), dois zquery (db_usuario e db_usuarioacesso). O db_usuario nao liguei em nenhum datasource, somente sql (SELECT * FROM USUARIOS ORDER BY NOME), ja o db_usuarioacesso liguei ao ds_usuario e a instrucao sql (SELECT * FROM USUARIOS_ACESSO WHERE CODIGO = :CODIGO ORDER BY CODIGO). Com isso ao selecionar o usuario aparece os acessos ao qual este usuario tem permissao.
Na aba permissao de acesso tenho um botao de 'autorizacoes', onde ao clicar recria todos os direitos de acesso gravando os menus do sistema. A rotina é a seguinte:
procedure TFrmUsuario.PngBtnRecriarClick(Sender: TObject);
var
i, y, z : integer;
ListaB : TStringList;
begin
if MessageDlg('Esse processo irá recriar todos os direitos de acesso aos Menus do sistema, continuar?',mtConfirmation,[mbYes,mbNo],0) = mrNo then
exit;
ListBox1.clear;
// grava opcoes do dxbar e dxitemlinks para liberacao de acesso
DB_UsuarioAcesso.close;
DB_UsuarioAcesso.open;
DS_UsuarioAcesso.AutoEdit := true;
DB_UsuarioAcesso.first;
while not DB_UsuarioAcesso.eof do
DB_UsuarioAcesso.Delete;
ListBox1.items := RecriaPermissao();
Memo1.Clear;
for i := 0 to (ListBox1.Count-1) do
begin
Memo1.lines.add( Trim(Copy(ListBox1.Items.Strings[i],1,40)) + ' *** ' + Trim(Copy(ListBox1.Items.Strings[i],43,70)) );
DB_UsuarioAcesso.append;
DB_UsuarioAcesso.FieldByName('MENU').AsString := DeletaCaract(Trim(Copy(ListBox1.Items.Strings[i],1,40)), '&' );
DB_UsuarioAcesso.FieldByName('MENU_NAME').AsString := UpperCase(Trim(Copy(ListBox1.Items.Strings[i],43,70)));
DB_UsuarioAcesso.FieldByName('MENU_ACESSAR').AsString := 'N';
//* neste ponto caso encontrar um menu em branco grava uma linha somente com o codigo usuario e menu_acessar recebe 0 (zero) ao inves de 'S' ou 'N'.
if (DB_UsuarioAcesso.FieldByName('MENU').AsString = '') then
DB_UsuarioAcesso.FieldByName('MENU_ACESSAR').AsString := '0';
DB_UsuarioAcesso.Post;
DB_UsuarioAcesso.CommitUpdates;
end;
DB_UsuarioAcesso.close;
DB_UsuarioAcesso.open;
// repetir
DB_UsuarioAcesso.close;
DB_UsuarioAcesso.open;
DS_UsuarioAcesso.AutoEdit := true;
DB_UsuarioAcesso.first;
while not DB_UsuarioAcesso.eof do
DB_UsuarioAcesso.Delete;
ListBox1.items := RecriaPermissao();
Memo1.Clear;
for i := 0 to (ListBox1.Count-1) do
begin
Memo1.lines.add( Trim(Copy(ListBox1.Items.Strings[i],1,40)) + ' *** ' + Trim(Copy(ListBox1.Items.Strings[i],43,70)) );
DB_UsuarioAcesso.append;
DB_UsuarioAcesso.FieldByName('MENU').AsString := DeletaCaract(Trim(Copy(ListBox1.Items.Strings[i],1,40)), '&' );
DB_UsuarioAcesso.FieldByName('MENU_NAME').AsString := UpperCase(Trim(Copy(ListBox1.Items.Strings[i],43,70)));
DB_UsuarioAcesso.FieldByName('MENU_ACESSAR').AsString := 'N';
//* neste ponto caso encontrar um menu em branco grava uma linha somente com o codigo usuario e menu_acessar recebe 0 (zero) ao inves de 'S' ou 'N'.
if (DB_UsuarioAcesso.FieldByName('MENU').AsString = '') then
DB_UsuarioAcesso.FieldByName('MENU_ACESSAR').AsString := '0';
DB_UsuarioAcesso.Post;
DB_UsuarioAcesso.CommitUpdates;
end;
DB_UsuarioAcesso.close;
DS_UsuarioAcesso.AutoEdit := False;
DB_UsuarioAcesso.open;
end;
Porem, ao final nao esta gravando a parte *, caso o menu seja branco grava registro somente com codigo usuario e menu_acessar 0 (zero) e da o seguinte erro:
9 record(s) update . only one record should have been updated.
o que pode esta acontecendo? pode ser um bug da zeoslib versao 7.0.3 visto que na versao 6.6.6 funciona normalmente....
Precisava migrar para versao 7 que tem protocolo firebird 2.5.
alguem poderia me ajudar, desde ja agradeco......
obgdo.
Ieustaquio
Curtir tópico
+ 0
Responder
Posts
28/05/2013
Rogerio Oliveira
conseguiu contornar o problema acima? estou com o mesmo problema.
Responder
10/10/2013
Elenicio Ramos
Boa tarde.
Apesar de já está com algum tempo dessa pergunta, gostaria de saber se tiveram alguma solução, pois
ainda estou com o mesmo problema.
Agradeço.
Apesar de já está com algum tempo dessa pergunta, gostaria de saber se tiveram alguma solução, pois
ainda estou com o mesmo problema.
Agradeço.
Responder
Clique aqui para fazer login e interagir na Comunidade :)