Fórum Cursor unknown #54775
16/01/2006
0
para DBExpress como o seguinte código;[/b:3864dae543]
[b:3864dae543]Ele tem um campo(EDIT1) para inserir o que se procura e três radiobuttons para se definir a pesquisa:
()comece com
()contenha
()termine com
e mais três para se escolher o campo a procurar
()nome
()empresa
()produto[/b:3864dae543]
unit UPesquisa;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBXpress, DBGrids, StdCtrls, ExtCtrls, ComCtrls, Buttons;
type
TForm3 = class(TForm)
ListView1: TListView;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
GroupBox2: TGroupBox;
RadioButton4: TRadioButton;
RadioButton5: TRadioButton;
RadioButton6: TRadioButton;
Button1: TButton;
BitBtn1: TBitBtn;
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Udtm1;
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var
Consulta:string;
ListItem:TListItem;
begin
if Trim(edit1.Text)<>´´ then
begin
Consulta:=´select * from EMPRESAS where ´;
//no campo;
if Radiobutton1.Checked=true then
Consulta:=Consulta + ´NOME ´
else if
Radiobutton2.Checked=true then
Consulta:=Consulta + ´EMPRESA ´
else
Consulta:=Consulta + ´PRODUTO ´;
//que;
if Radiobutton4.Checked=true then
Begin
Consulta:=Consulta + ´starting with ´´´ +Edit1.Text+ ´´´´;
end
else if
Radiobutton5.Checked=true then
begin
Consulta:=Consulta + ´like ´´¬´+Edit1.Text+´¬´´´
end
else
Consulta:=Consulta + ´like ´´¬´+Edit1.Text+´´´´;
try
Transacao.TransactionID:=1;
Transacao.IsolationLevel:=xilREPEATABLEREAD;
dtm1.SQLConnection1.StartTransaction(Transacao);
dtm1.SQLQuery1.Close;
dtm1.SQLQuery1.SQL.Clear;
dtm1.SQLQuery1.SQL.Append(Consulta);
dtm1.SQLQuery1.Open;
dtm1.SQLConnection1.Commit(Transacao);
except
on Exc:Exception do
Begin
ShowMessage(´Ocorreu um erro na Consulta:´+exc.Message);
dtm1.SQLConnection1.Rollback(Transacao);
end;
end;
end;
dtm1.SQLQuery1.First;
ListView1.Items.Clear;
while true do
Begin
ListItem:=ListView1.Items.Add;
ListItem.Caption:=dtm1.SQLQuery1.Fields[0].AsString;
ListItem.SubItems.Add(dtm1.SQLQuery1.Fields[1].AsString);
ListItem.SubItems.Add(dtm1.SQLQuery1.Fields[2].AsString);
ListItem.SubItems.Add(dtm1.SQLQuery1.Fields[3].AsString);
ListItem.SubItems.Add(dtm1.SQLQuery1.Fields[4].AsString);
ListItem.SubItems.Add(dtm1.SQLQuery1.Fields[5].AsString);
Try
dtm1.SQLQuery1.Next;
except
break;
end;
end;
end;
[b:3864dae543][color=red:3864dae543]O erro:[/color:3864dae543][/b:3864dae543]
[color=black:3864dae543][b:3864dae543]Project ProjFornec.exe raised exception class EDatabaseError with message ´Cursor unknown´.
Process stopped...[/b:3864dae543][/color:3864dae543]
[b:3864dae543][color=red:3864dae543]se dá quando tento incluir todos os resultados da Query no ListView através do while pois se eu deixar apenas as linhas[/color:3864dae543][/b:3864dae543]
[b:3864dae543]ListItem:=ListView1.Items.Add;
ListItem.Caption:=dtm1.SQLQuery1.Fields[0].AsString;
ListItem.SubItems.Add(dtm1.SQLQuery1.Fields[1].AsString);
ListItem.SubItems.Add(dtm1.SQLQuery1.Fields[2].AsString);
ListItem.SubItems.Add(dtm1.SQLQuery1.Fields[3].AsString);
ListItem.SubItems.Add(dtm1.SQLQuery1.Fields[4].AsString);
ListItem.SubItems.Add(dtm1.SQLQuery1.Fields[5].AsString);[/b:3864dae543]
[color=red:3864dae543][b:3864dae543]ele nã dá erro mas dá apenas um resultado.[/b:3864dae543][/color:3864dae543]
Muito Obrigado.
Fonsenix
Curtir tópico
+ 0Posts
16/01/2006
Edilcimar
Gostei + 0
16/01/2006
Fonsenix
Amigo Edicilmar , como posso proceder então?
Grato.
Gostei + 0
17/01/2006
Edilcimar
Gostei + 0
17/01/2006
Fonsenix
Caro Edilcimar,
eu deixei o código assim:
[b:f4aec0fae6]unit UPesquisa;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBXpress, DBGrids, StdCtrls, ExtCtrls, ComCtrls, Buttons;
type
TForm3 = class(TForm)
ListView1: TListView;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
GroupBox2: TGroupBox;
RadioButton4: TRadioButton;
RadioButton5: TRadioButton;
RadioButton6: TRadioButton;
Button1: TButton;
BitBtn1: TBitBtn;
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CarregaLista;
end;
var
Form3: TForm3;
implementation
uses Udtm1;
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var
Consulta:string;
begin
if Trim(edit1.Text)<>´´ then
begin
Consulta:=´select * from EMPRESAS where ´;
//no campo;
if Radiobutton1.Checked=true then
Consulta:=Consulta + ´NOME ´
else if
Radiobutton2.Checked=true then
Consulta:=Consulta + ´EMPRESA ´
else
Consulta:=Consulta + ´PRODUTO ´;
//que;
if Radiobutton4.Checked=true then
Begin
Consulta:=Consulta + ´starting with ´´´ +Edit1.Text+ ´´´´;
end
else if
Radiobutton5.Checked=true then
begin
Consulta:=Consulta + ´like ´´¬´+Edit1.Text+´¬´´´
end
else
Consulta:=Consulta + ´like ´´¬´+Edit1.Text+´´´´;
try
Transacao.TransactionID:=1;
Transacao.IsolationLevel:=xilREPEATABLEREAD;
dtm1.SQLConnection1.StartTransaction(Transacao);
dtm1.SQLQuery1.Close;
dtm1.SQLQuery1.SQL.Clear;
dtm1.SQLQuery1.SQL.Append(Consulta);
dtm1.SQLQuery1.Open;
dtm1.SQLConnection1.Commit(Transacao);
except
on Exc:Exception do
Begin
ShowMessage(´Ocorreu um erro na Consulta:´+exc.Message);
dtm1.SQLConnection1.Rollback(Transacao);
end;
end;
CarregaLista;
end;
end;
procedure Tform3.CarregaLista;
Begin
dtm1.SQLQuery1.First;
ListView1.Items.Clear;
ListView1.Items.Add;
ListView1.Items.Item[ ListView1.Items.Count -1 ].Caption := dtm1.SQLQuery1.Fields.Fields[0].AsString;
ListView1.Items.Item[ ListView1.Items.Count -1 ].SubItems.Add(dtm1.SQLQuery1.Fields.Fields[1].AsString);
dtm1.SQLQuery1.Next;
End;
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
Close;
end;
end.[/b:f4aec0fae6]
E mesmo se a minha pesquisa resultar em vários registros eu não preciso usar o while?
Muito Obrigado por sua ajuda.
Gostei + 0
17/01/2006
Fonsenix
Caro Edilcimar,
eu deixei o código assim:
[b:82923bf4e5]unit UPesquisa;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBXpress, DBGrids, StdCtrls, ExtCtrls, ComCtrls, Buttons;
type
TForm3 = class(TForm)
ListView1: TListView;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
GroupBox2: TGroupBox;
RadioButton4: TRadioButton;
RadioButton5: TRadioButton;
RadioButton6: TRadioButton;
Button1: TButton;
BitBtn1: TBitBtn;
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CarregaLista;
end;
var
Form3: TForm3;
implementation
uses Udtm1;
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var
Consulta:string;
begin
if Trim(edit1.Text)<>´´ then
begin
Consulta:=´select * from EMPRESAS where ´;
//no campo;
if Radiobutton1.Checked=true then
Consulta:=Consulta + ´NOME ´
else if
Radiobutton2.Checked=true then
Consulta:=Consulta + ´EMPRESA ´
else
Consulta:=Consulta + ´PRODUTO ´;
//que;
if Radiobutton4.Checked=true then
Begin
Consulta:=Consulta + ´starting with ´´´ +Edit1.Text+ ´´´´;
end
else if
Radiobutton5.Checked=true then
begin
Consulta:=Consulta + ´like ´´¬´+Edit1.Text+´¬´´´
end
else
Consulta:=Consulta + ´like ´´¬´+Edit1.Text+´´´´;
try
Transacao.TransactionID:=1;
Transacao.IsolationLevel:=xilREPEATABLEREAD;
dtm1.SQLConnection1.StartTransaction(Transacao);
dtm1.SQLQuery1.Close;
dtm1.SQLQuery1.SQL.Clear;
dtm1.SQLQuery1.SQL.Append(Consulta);
dtm1.SQLQuery1.Open;
dtm1.SQLConnection1.Commit(Transacao);
except
on Exc:Exception do
Begin
ShowMessage(´Ocorreu um erro na Consulta:´+exc.Message);
dtm1.SQLConnection1.Rollback(Transacao);
end;
end;
CarregaLista;
end;
end;
procedure Tform3.CarregaLista;
Begin
dtm1.SQLQuery1.First;
ListView1.Items.Clear;
ListView1.Items.Add;
ListView1.Items.Item[ ListView1.Items.Count -1 ].Caption := dtm1.SQLQuery1.Fields.Fields[0].AsString;
ListView1.Items.Item[ ListView1.Items.Count -1 ].SubItems.Add(dtm1.SQLQuery1.Fields.Fields[1].AsString);
dtm1.SQLQuery1.Next;
End;
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
Close;
end;
end.[/b:82923bf4e5]
Mas continua dando erro de Cursor Unknown.
E mesmo se a minha pesquisa resultar em vários registros eu não preciso usar o while?
Muito Obrigado por sua ajuda.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)