Problema com o CLientDataSet

Delphi

07/05/2013

Bom dia,

estou usando um cds, no meu projeto, so que quando ele ativo ele

aparece esse erro

List Indes Out Of Bounds (0)

O que devo fazer...

Cayro Rodrigo

Cayro Rodrigo

Curtidas 0

Respostas

Frederico Brigatte***

Frederico Brigatte***

07/05/2013

Oque vc está tentando fazer? Poste aqui o código.
GOSTEI 0
Cayro Rodrigo

Cayro Rodrigo

07/05/2013

Oque vc está tentando fazer? Poste aqui o código.

unit FCadPaciente_u;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ComCtrls, Vcl.DBCtrls,
Vcl.StdCtrls, Vcl.Mask, Vcl.Buttons, Vcl.Grids, Vcl.DBGrids, Data.DB,
Vcl.Touch.Keyboard;

type
TF_CadPaciente = class(TForm)
Panel1: TPanel;
PageControl1: TPageControl;
Panel2: TPanel;
tabcad: TTabSheet;
TabSheet2: TTabSheet;
Observação: TTabSheet;
label1: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label6: TLabel;
Label7: TLabel;
Label5: TLabel;
DBEdit7: TDBEdit;
Label8: TLabel;
DBEdit8: TDBEdit;
Label9: TLabel;
DBEdit9: TDBEdit;
Label10: TLabel;
DBEdit10: TDBEdit;
Label11: TLabel;
DBComboBox2: TDBComboBox;
Label12: TLabel;
DBComboBox3: TDBComboBox;
Label13: TLabel;
DBEdit11: TDBEdit;
Label14: TLabel;
DBEdit12: TDBEdit;
Foto: TDBImage;
Label15: TLabel;
btNovo: TSpeedButton;
btEditar: TSpeedButton;
btGravar: TSpeedButton;
btDesistir: TSpeedButton;
btExcluir: TSpeedButton;
btFechar: TSpeedButton;
dsPaciente: TDataSource;
DBGrid1: TDBGrid;
DBMemo1: TDBMemo;
Label16: TLabel;
DBEdit13: TDBEdit;
OpenDialog1: TOpenDialog;
dsHistorico: TDataSource;
DBComboBox1: TDBComboBox;
DBNavigator1: TDBNavigator;
procedure btNovoClick(Sender: TObject);
procedure btDesistirClick(Sender: TObject);
procedure btEditarClick(Sender: TObject);
procedure btExcluirClick(Sender: TObject);
procedure btGravarClick(Sender: TObject);
procedure btFecharClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FotoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FotoClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
procedure AtivaBotoes(Ativa: Boolean); // ATIVA BOTOES DE CONTROLE
procedure Normal; // DEIXA TUDO PADRÃO
public
{ Public declarations }
end;

var
F_CadPaciente: TF_CadPaciente;

implementation

{$R *.dfm}



uses Base, F_Principal_u;

procedure TF_CadPaciente.Normal;
begin
//tabcad.Action := ;
AtivaBotoes(False);
end;
procedure TF_CadPaciente.AtivaBotoes(Ativa: Boolean);
begin
//Grupo1.Enabled:= Not Ativa;
//Grupo2.Enabled := Ativa;
BtNovo.Enabled := false;
BtGravar.Enabled := true;
btDesistir.Enabled := true;
BtExcluir.Enabled := false;
BtFechar.Enabled := false;
btEditar.Enabled:= false;
//BitBtn1.Enabled := not Ativa;
// Setas.Enabled := not Ativa;
// Combobox1.Enabled := not Ativa;
end;

procedure TF_CadPaciente.btDesistirClick(Sender: TObject);
begin
DM1.cdsPaciente.Cancel;
BtNovo.Enabled := true;
BtGravar.Enabled := false;
btDesistir.Enabled := false;
BtExcluir.Enabled := true;
BtFechar.Enabled := true;
btEditar.Enabled:= true;

end;

procedure TF_CadPaciente.btEditarClick(Sender: TObject);
begin
Normal;
AtivaBotoes(true);
DM1.cdsPaciente.Edit;
DBEdit2.SetFocus;
end;

procedure TF_CadPaciente.btExcluirClick(Sender: TObject);
begin
if DM1.cdsPaciente.IsEmpty then exit;
if MessageDlg( 'Atenção! se você excluir este registro, poderá ter ' + #13+
'problemas com outros cadstro. Certifique-se que '+ #13 +
'não irá ter problemas posterior anter de excluir.' + #13 +
' ' + #13 +
'Deseja realmente excluir o registro agora? ',
mtInformation,[mbYes,mbNo],0) = mrYes then
begin
try
DM1.cdsPaciente.Delete;
DM1.cdsPaciente.ApplyUpdates(0);
except
MessageDlg('Tabela em uso exclusivo no momento.',mtError,[mbOK],0);
end;
end;

end;

procedure TF_CadPaciente.btFecharClick(Sender: TObject);
begin
Close;
end;

procedure TF_CadPaciente.btGravarClick(Sender: TObject);
begin
try
if DM1.cdsPacientePAC_PACIENTE.IsNull then
begin
MessageDlg('O nome do paciente não pode ficar em branco!',mtInformation,[mbOK],0);
DBEdit2.SetFocus;
exit;
end;
with DM1.cdsPaciente do
begin
if State in [dsInsert,dsEdit] then
begin
Normal;
DM1.cdsPaciente.Post;
DM1.cdsPaciente.ApplyUpdates(0);
end;
end;
finally

MessageDlg('Gravação efetuada com sucesso.',mtConfirmation,[mbOK],0);
DM1.cdsPaciente.Post;
BtNovo.Enabled := true;
BtGravar.Enabled := false;
btDesistir.Enabled := false;
BtExcluir.Enabled := true;
BtFechar.Enabled := true;
btEditar.Enabled:= true;

end;


end;

procedure TF_CadPaciente.btNovoClick(Sender: TObject);
begin
Normal;
DM1.cdsPaciente.Append;
DBEdit2.SetFocus;
end;

procedure TF_CadPaciente.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DM1.cdsPaciente.Close;
end;

procedure TF_CadPaciente.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key = Vk_Return Then
Perform(Wm_NextDlgCtl,0,0);

If (Key = Vk_F2) and (BtNovo.Enabled = true) Then
BtNovo.OnClick(Sender);

If (Key = Vk_F3) and (BtNovo.Enabled = true) Then
btEditar.OnClick(Sender);

If (Key = Vk_F4) and (BtNovo.Enabled = false) Then
BtGravar.OnClick(Sender);

If (Key = Vk_F5) and (BtNovo.Enabled = false) Then
btDesistir.OnClick(Sender);

If (Key = Vk_F6) and (BtNovo.Enabled = true) Then
BtExcluir.OnClick(Sender);
end;

procedure TF_CadPaciente.FormKeyPress(Sender: TObject; var Key: Char);
begin
If Key = #13 Then
Key := #0 ;
end;

procedure TF_CadPaciente.FormShow(Sender: TObject);
begin
DM1.cdsPaciente.Open;
end;

procedure TF_CadPaciente.FotoClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Foto.Picture.LoadFromFile(OpenDialog1.FileName);
end;

end;

procedure TF_CadPaciente.FotoKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_F10 then
if OpenDialog1.Execute then
begin
Foto.Picture.LoadFromFile(OpenDialog1.FileName);
end;

end;

end.
GOSTEI 0
Tomas Raponi

Tomas Raponi

07/05/2013

Cayro, pelo codigo nao consegui ver o que voce esta fazendo, pois o seu ClientDataset esta no datamodule.

Se voce estiver utilizando com sqlquery e datasetprovider, veja se estao ligados corretamente.

Se for um ClientDatasest em Memoria, talvez voce tenha incluido um campo como ADD, ou algo parecido e com isso
apareceu essa mensagem.

Precisaria saber como esta a configuracao no datamodule.
GOSTEI 0
Alex Constâncio

Alex Constâncio

07/05/2013

Olá

No seu lugar eu compilaria o projeto com Debug DCUs e executaria a situação de problema para provocar a exceção. Quando o Delphi parasse a execução para mostrar a exceção eu olharia na janela stack para percorrer a lista de chamadas e iria navegando pelo código para entender de qual index o componente está reclamando.

A mensagem parece ser a mesma emitida por um TList ou TObjectList quando é tentado acessar um item que não está na lista. imagino que o problema esteja sendo motivado por alguma configuração incorreta. Pelo stack você vai ter boas chances de localizar esta configuração.

Alex
GOSTEI 0
POSTAR