Erro 0 records updating
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
Curtidas 0
Respostas
Rogerio Oliveira
25/04/2013
conseguiu contornar o problema acima? estou com o mesmo problema.
GOSTEI 0
Elenicio Ramos
25/04/2013
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.
GOSTEI 0