Erro: SQL Error: Conversion error from string. Error Code: -413. Overflow ocurred during data type conversion.

Delphi

Firebird

02/11/2015

Boa Noite pessoal...

Sou novo por aqui e voltei a programar faz pouco tempo, depois de muito tempo mesmo...

Tô usando Delphi/Lazarus pra montar um Sistema, com Login/Senha e Níveis de Acesso...

Está dando este erro... O programa compila e Executa normalmente, mas quando preciso abrir mais de um Form, ele me apresenta este erro...

Tô usando Banco de Dados Firebird e Conexão Zeos Lib... Segue código... Se alguém puder me ajudar... Agradeço...

unit uPrincipal;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, SpkToolbar, spkt_Tab, spkt_Pane, spkt_Buttons,
Forms, Controls, Graphics, Dialogs, ActnList, ComCtrls, ExtCtrls;

type

{ TF_Principal }

TF_Principal = class(TForm)
acBackupRestore: TAction;
acLog: TAction;
acNiveis: TAction;
acSair: TAction;
acTrocaSenha: TAction;
acUsuarios: TAction;
actPrincipal: TActionList;
appPrincipal: TApplicationProperties;
imgPrincipal: TImageList;
lbUsuario: TSpkLargeButton;
lbTrocaSenha: TSpkLargeButton;
spDados: TSpkPane;
lbBackupRestore: TSpkLargeButton;
lbLog: TSpkLargeButton;
lbNiveis: TSpkLargeButton;
lbSair: TSpkLargeButton;
spSair: TSpkPane;
spSeguranca: TSpkPane;
spUsuarios: TSpkPane;
spkSistema: TSpkTab;
spkPrincipal: TSpkToolbar;
spkCadastros: TSpkTab;
sttPrincipal: TStatusBar;
procedure acBackupRestoreExecute(Sender: TObject);
procedure acLogExecute(Sender: TObject);
procedure acNiveisExecute(Sender: TObject);
procedure acSairExecute(Sender: TObject);
procedure acTrocaSenhaExecute(Sender: TObject);
procedure acUsuariosExecute(Sender: TObject);
procedure appPrincipalHint(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormActivate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

var
F_Principal: TF_Principal;

implementation

uses uLogin, uUsuarios, uDmDados, uBackupRestore, uNivelAcesso, uTrocaSenha,
uHistorico;

{$R *.lfm}

{ TF_Principal }

procedure TF_Principal.acSairExecute(Sender: TObject);
begin
Close;
end;

procedure TF_Principal.acTrocaSenhaExecute(Sender: TObject);
begin
Try
Dm_Dados.Q_NivelAcesso.Active:=False;
Dm_Dados.Q_NivelAcesso.SQL.Clear;
Dm_Dados.Q_NivelAcesso.SQL.Add('SELECT * FROM TB_NIVEL_ACESSO WHERE CODIGO_FUNCIONARIO='+#39+Dm_Dados.Rq_ConsUsuario.FieldByName('CODIGO').AsString+#39);
Dm_Dados.Q_NivelAcesso.SQL.Add(' AND CODIGO_MODULO='+#39+IntToStr(acTrocaSenha.Tag)+#39);
Dm_Dados.Q_NivelAcesso.Active:=True;
If Dm_Dados.Q_NivelAcesso.FieldByName('CODIGO_FUNCIONARIO').AsString <> '' then
begin
F_TrocaSenha:= TF_TrocaSenha.Create(Application);
F_TrocaSenha.ShowModal;
end
else
ShowMessage('Você não tem "PERMISSÃO" para usar este MÓDULO!!!');
finally
FreeAndNil(F_TrocaSenha);
end;
end;

procedure TF_Principal.acBackupRestoreExecute(Sender: TObject);
begin
Try
Dm_Dados.Q_NivelAcesso.Active:=False;
Dm_Dados.Q_NivelAcesso.SQL.Clear;
Dm_Dados.Q_NivelAcesso.SQL.Add('SELECT * FROM TB_NIVEL_ACESSO WHERE CODIGO_FUNCIONARIO='+#39+Dm_Dados.Rq_ConsUsuario.FieldByName('CODIGO').AsString+#39);
Dm_Dados.Q_NivelAcesso.SQL.Add(' AND CODIGO_MODULO='+#39+IntToStr(acBackupRestore.Tag)+#39);
Dm_Dados.Q_NivelAcesso.Active:=True;
If Dm_Dados.Q_NivelAcesso.FieldByName('CODIGO_FUNCIONARIO').AsString <> '' then
begin
F_BackupRestore:= TF_BackupRestore.Create(Application);
F_BackupRestore.ShowModal;
end
else
ShowMessage('Você não tem "PERMISSÃO" para usar este MÓDULO!!!');
finally
FreeAndNil(F_BackupRestore);
end;
end;

procedure TF_Principal.acLogExecute(Sender: TObject);
begin
Try
Dm_Dados.Q_NivelAcesso.Active:=False;
Dm_Dados.Q_NivelAcesso.SQL.Clear;
Dm_Dados.Q_NivelAcesso.SQL.Add('SELECT * FROM TB_NIVEL_ACESSO WHERE CODIGO_FUNCIONARIO='+#39+Dm_Dados.Rq_ConsUsuario.FieldByName('CODIGO').AsString+#39);
Dm_Dados.Q_NivelAcesso.SQL.Add(' AND CODIGO_MODULO='+#39+IntToStr(acLog.Tag)+#39);
Dm_Dados.Q_NivelAcesso.Active:=True;
If Dm_Dados.Q_NivelAcesso.FieldByName('CODIGO_FUNCIONARIO').AsString <> '' then
begin
F_Historico:= TF_Historico.Create(Application);
F_Historico.ShowModal;
end
else
ShowMessage('Você não tem "PERMISSÃO" para usar este MÓDULO!!!');
finally
FreeAndNil(F_Historico);
end;
end;

procedure TF_Principal.acNiveisExecute(Sender: TObject);
begin
Try
Dm_Dados.Q_NivelAcesso.Active:=False;
Dm_Dados.Q_NivelAcesso.SQL.Clear;
Dm_Dados.Q_NivelAcesso.SQL.Add('SELECT * FROM TB_NIVEL_ACESSO WHERE CODIGO_FUNCIONARIO='+#39+Dm_Dados.Rq_ConsUsuario.FieldByName('CODIGO').AsString+#39);
Dm_Dados.Q_NivelAcesso.SQL.Add(' AND CODIGO_MODULO='+#39+IntToStr(acNiveis.Tag)+#39);
Dm_Dados.Q_NivelAcesso.Active:=True;
If Dm_Dados.Q_NivelAcesso.FieldByName('CODIGO_FUNCIONARIO').AsString <> '' then
begin
F_NivelAcesso:= TF_NivelAcesso.Create(Application);
F_NivelAcesso.ShowModal;
end
else
ShowMessage('Você não tem "PERMISSÃO" para usar este MÓDULO!!!');
finally
FreeAndNil(F_NivelAcesso);
end;
end;

procedure TF_Principal.acUsuariosExecute(Sender: TObject);
begin
Try
Dm_Dados.Q_NivelAcesso.Active:=False;
Dm_Dados.Q_NivelAcesso.SQL.Clear;
Dm_Dados.Q_NivelAcesso.SQL.Add('SELECT * FROM TB_NIVEL_ACESSO WHERE CODIGO_FUNCIONARIO='+#39+Dm_Dados.Rq_ConsUsuario.FieldByName('CODIGO').AsString+#39);
Dm_Dados.Q_NivelAcesso.SQL.Add(' AND CODIGO_MODULO='+#39+IntToStr(acUsuarios.Tag)+#39);
Dm_Dados.Q_NivelAcesso.Active:=True;
If Dm_Dados.Q_NivelAcesso.FieldByName('CODIGO_FUNCIONARIO').AsString <> '' then
begin
F_Usuarios:= TF_Usuarios.Create(Application);
F_Usuarios.ShowModal;
end
else
ShowMessage('Você não tem "PERMISSÃO" para usar este MÓDULO!!!');
finally
FreeAndNil(F_Usuarios);
end;
end;

procedure TF_Principal.appPrincipalHint(Sender: TObject);
begin
sttPrincipal.Panels[1].Text:=' ' + Application.Hint;
end;

procedure TF_Principal.FormActivate(Sender: TObject);
begin
acSair.Caption:=' Fazer Logoff de: ' + F_Login.edtUsuario.Text;
end;

procedure TF_Principal.FormClose(Sender: TObject; var CloseAction: TCloseAction
);
begin
if MessageDlg('Global SysCom','Você deseja realmente fazer Logoff do Sistema?!!!',mtConfirmation,[mbOk,mbCancel],0) <> mrOk then
Application.Run;
end;

end.
Luis Santos

Luis Santos

Curtidas 0

Respostas

Jonas Tomazelli

Jonas Tomazelli

02/11/2015

Bom dia amigo, isso aparentemente pode ser algum dado que você esteja convertendo para string, e o tamanhã da string é menor do que deveria ser.
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

02/11/2015

Acredito que seja algum campo que esteja na tabela como Integer e você esteja coletando como string:

Verifique o campo CODIGO_FUNCIONARIO na sua tabela
Se na tabela estiver como Integer

Ao invés de usar If Dm_Dados.Q_NivelAcesso.FieldByName('CODIGO_FUNCIONARIO').AsString <> '' then
Use
Ao invés de usar If inttostr (Dm_Dados.Q_NivelAcesso.FieldByName('CODIGO_FUNCIONARIO').Asinteger) <> '' then

Se não funcionar, verifique os demais campos.
GOSTEI 0
Luis Santos

Luis Santos

02/11/2015

Acredito que seja algum campo que esteja na tabela como Integer e você esteja coletando como string:

Verifique o campo CODIGO_FUNCIONARIO na sua tabela
Se na tabela estiver como Integer

Ao invés de usar If Dm_Dados.Q_NivelAcesso.FieldByName('CODIGO_FUNCIONARIO').AsString <> '' then
Use
Ao invés de usar If inttostr (Dm_Dados.Q_NivelAcesso.FieldByName('CODIGO_FUNCIONARIO').Asinteger) <> '' then

Se não funcionar, verifique os demais campos.


Boa Noite!!!

Fiz o que me recomendou mas continua dando o mesmo erro... Tô enviando a cópia do Form Nível de Acesso... Se puder me ajudar agradeço...

unit uNivelAcesso;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
DBGrids, ExtCtrls, Buttons;

type

{ TF_NivelAcesso }

TF_NivelAcesso = class(TForm)
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
btAtribuir: TSpeedButton;
btSair: TSpeedButton;
btRemover: TSpeedButton;
TreeView1: TTreeView;
procedure btAtribuirClick(Sender: TObject);
procedure btRemoverClick(Sender: TObject);
procedure btSairClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

var
F_NivelAcesso: TF_NivelAcesso;

implementation

uses uDmDados;

{$R *.lfm}

{ TF_NivelAcesso }

procedure TF_NivelAcesso.btSairClick(Sender: TObject);
begin
Close;
end;

procedure TF_NivelAcesso.btAtribuirClick(Sender: TObject);
begin
Dm_Dados.Q_NivelAcesso.Append;
Dm_Dados.Q_NivelAcesso.FieldByName('MODULO').AsString:=TreeView1.Selected.Text;
Dm_Dados.Q_NivelAcesso.FieldByName('CODIGO_FUNCIONARIO').AsString:=DM_Dados.Rq_ConsUsuario.FieldByName('CODIGO').AsString;
Dm_Dados.Q_NivelAcesso.FieldByName('CODIGO_MODULO').AsString:=Copy(TreeView1.Selected.Text,1,2);
Dm_Dados.Q_NivelAcesso.Post;
Dm_Dados.Q_NivelAcesso.Refresh;
end;

procedure TF_NivelAcesso.btRemoverClick(Sender: TObject);
begin
if MessageDlg('Você deseja realmente REMOVER o Nível de Acesso ao Módulo selecionado deste funcionário?!!!',mtConfirmation,[mbOk,mbCancel],0) <> mrCancel then
Dm_Dados.Q_NivelAcesso.Delete;
end;

procedure TF_NivelAcesso.FormActivate(Sender: TObject);
begin
Dm_Dados.ZGlobalSysCom.Connected:=True;
Dm_Dados.Q_NivelAcesso.Active:=True;
Dm_Dados.Rq_ConsUsuario.Active:=False;
Dm_Dados.Rq_ConsUsuario.SQL.Clear;
Dm_Dados.Rq_ConsUsuario.SQL.Add('SELECT * FROM TB_USUARIO');
Dm_Dados.Rq_ConsUsuario.Active:=True;
end;

procedure TF_NivelAcesso.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
Dm_Dados.Rq_ConsUsuario.Active:=False;
Dm_Dados.Q_NivelAcesso.Active:=False;
Release;
end;

procedure TF_NivelAcesso.FormCreate(Sender: TObject);
begin

end;

end.
GOSTEI 0
Luis Santos

Luis Santos

02/11/2015

Sendo a tabela

CREATE TABLE TB_NIVEL_ACESSO (
MODULO VARCHAR(60),
CODIGO_FUNCIONARIO INTEGER,
CODIGO_MODULO INTEGER
);
GOSTEI 0
POSTAR