estava usado o compmnente table num cadastro de pedidos, e resolvi trocar o table pelo componente zquery.
Na migração, foi tudo bem porem, quando abro o formulario, da uma mensagen de "sql error: query was empty".
mas não consigo matar esse erro. obs: o codigo compila certinho.
segue o codigo que estou usando. se alguém puder me ajudar, muito obrigado
unit CadPedidos;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ZDataset, DB, ZAbstractRODataset, ZAbstractDataset,
ZAbstractTable, Grids, DBGrids, StdCtrls, Buttons, DBCtrls, Mask,
ExtCtrls;
type
TCPedidos = class(TForm)
PanelDados: TPanel;
LabelCodigoPedido: TLabel;
LabelCondicaoPagamento: TLabel;
LabelCodigoCliente: TLabel;
LabelLocalFatura: TLabel;
LabelLocalCobranca: TLabel;
LabelLocalEntrega: TLabel;
LabelCPF_CNPJ: TLabel;
LabelCEP: TLabel;
LabelDataCadastro: TLabel;
LabelTotalPedido: TLabel;
DBEditCodigoPedido: TDBEdit;
DBEditCondicaoPagamento: TDBEdit;
DBEditCodigoCliente: TDBEdit;
DBEditLocalFatura: TDBEdit;
DBEditLocalCobranca: TDBEdit;
DBEditLocalEntrega: TDBEdit;
DBEditCPF_CNPJ: TDBEdit;
DBEditCEP: TDBEdit;
DBEditDataCadastro: TDBEdit;
StaticTextTotal: TStaticText;
PanelBotoes: TPanel;
SpdBtnAlterar: TSpeedButton;
SpdBtnIncluir: TSpeedButton;
SpdBtnProcurar: TSpeedButton;
SpdBtnCancelar: TSpeedButton;
SpdBtnGravar: TSpeedButton;
SpdBtnExcluir: TSpeedButton;
DBNavigatorPedidos: TDBNavigator;
BitBtnFechar: TBitBtn;
Button1: TButton;
DBGridItens: TDBGrid;
DSPedidos: TDataSource;
DSItens: TDataSource;
QryClientes2: TZQuery;
QryClientes2CodigoCliente: TIntegerField;
QryClientes2Nome: TStringField;
QryClientes2Tipo: TStringField;
QryClientes2Endereco: TStringField;
QryClientes2Email: TStringField;
QryClientes2Bairro: TStringField;
QryClientes2Cidade: TStringField;
QryClientes2Estado: TStringField;
QryClientes2Telefone: TStringField;
QryClientes2CPF_CNPJ: TStringField;
QryClientes2DataCadastro: TDateField;
DSClientes: TDataSource;
QryPedidos: TZQuery;
QryItens: TZQuery;
QryClientes: TZQuery;
QryProdutos: TZQuery;
QryPedidosCodigoPedido: TIntegerField;
QryPedidosCondicaoPgto: TStringField;
QryPedidosCodigoCliente: TIntegerField;
QryPedidosNomeCli: TStringField;
QryPedidosLocalFatura: TStringField;
QryPedidosLocalCobranca: TStringField;
QryPedidosLocalEntrega: TStringField;
QryPedidosCPF_CNPJ: TStringField;
QryPedidosCEP: TStringField;
QryPedidosDataCadastro: TDateField;
QryPedidosNomeCliente: TStringField;
Label1: TLabel;
DBLookupComboBoxNomeCliente: TDBLookupComboBox;
QryItensItem: TIntegerField;
QryItensNumeroPedido: TIntegerField;
QryItensCodigoProduto: TIntegerField;
QryItensQuantidade: TIntegerField;
QryItensPrecoUni: TIntegerField;
QryProdutosCodigoProduto: TIntegerField;
QryProdutosDescricao: TStringField;
QryProdutosPrecoUni: TIntegerField;
QryClientesCodigoCliente: TIntegerField;
QryClientesDataCadastro: TDateField;
QryClientesTipo: TStringField;
QryClientesCPF_CNPJ: TStringField;
QryClientesNome: TStringField;
QryClientesEndereco: TStringField;
QryClientesBairro: TStringField;
QryClientesCidade: TStringField;
QryClientesEstado: TStringField;
QryClientesTelefone: TStringField;
QryClientesEmail: TStringField;
QryItensTotal: TCurrencyField;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure QryPedidosNewRecord(DataSet: TDataSet);
procedure QryItensNewRecord(DataSet: TDataSet);
procedure QryItensCalcFields(DataSet: TDataSet);
procedure QryItensBeforeInsert(DataSet: TDataSet);
procedure QryItensBeforePost(DataSet: TDataSet);
procedure DBGridItensKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure QryItensCodigoProdutoValidate(Sender: TField);
procedure QryPedidosDataCadastroSetText(Sender: TField;
const Text: String);
procedure SpdBtnIncluirClick(Sender: TObject);
procedure SpdBtnAlterarClick(Sender: TObject);
procedure SpdBtnExcluirClick(Sender: TObject);
procedure SpdBtnGravarClick(Sender: TObject);
procedure SpdBtnCancelarClick(Sender: TObject);
procedure SpdBtnProcurarClick(Sender: TObject);
procedure DBLookupComboBoxNomeClienteClick(Sender: TObject);
private
{ Private declarations }
procedure AtivarControles(Ativar: Boolean);
procedure RecalculaPedido;
public
{ Public declarations }
end;
var
CPedidos: TCPedidos;
implementation
uses dmsane, ListaPedidos; //RelatorioPedidos;
{$R *.dfm}
procedure TCPedidos.FormCreate(Sender: TObject);
begin
QryProdutos.Close;
QryClientes.Close;
QryPedidos.Close;
QryItens.Close;
end;
procedure TCPedidos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
QryProdutos.Open;
QryClientes.Open;
QryPedidos.Open;
QryItens.Open;
end;
procedure TCPedidos.FormDestroy(Sender: TObject);
begin
//Action:= cafree;// remove o form da memória
//CPedidos := NIL; // informa que foi destruído (não criado
end;
procedure TCPedidos.AtivarControles(Ativar: Boolean);
begin
PanelDados.Enabled := Ativar;
DBNavigatorPedidos.Enabled := (not Ativar);
DBGridItens.ReadOnly := (not Ativar);
SpdBtnIncluir.Enabled := (not Ativar);
SpdBtnAlterar.Enabled := (not Ativar);
SpdBtnExcluir.Enabled := (not Ativar);
SpdBtnGravar.Enabled := Ativar;
SpdBtnCancelar.Enabled := Ativar;
SpdBtnProcurar.Enabled := (not Ativar);
end;
procedure TCPedidos.DBLookupComboBoxNomeClienteClick(Sender: TObject);
begin
QryClientes2.Close;
QryClientes2.sql.Clear;
QryClientes2.SQL.Add('Select * from Clientes where Nome = '+''''+DBLookupComboBoxNomeCliente.Text+''''+'');
QryClientes2.Open;
QryClientes2.first;
while not QryClientes2.EOF do
begin
DBEditCodigoCliente.Text := QryClientes2.Fields[0].Value;
DBEditLocalCobranca.Text := QryClientes2.Fields[3].Value +', '+ QryClientes2.Fields[5].Value +' - ' + QryClientes2.Fields[6].Value +'/' +QryClientes2.Fields[7].Value;
DBEditCPF_CNPJ.Text := QryClientes2.Fields[9].Value;
QryClientes2.Next;
end;
end;
procedure TCPedidos.SpdBtnProcurarClick(Sender: TObject);
begin
Application.CreateForm(TLPedidos, LPedidos);
LPedidos.Show;
end;
procedure TCPedidos.RecalculaPedido;
var
TmpQry:TZQuery;
Total:Currency; // armazena valores do tipo moeda
begin
// cria um objeto Qry via codificação
TmpQry := TZQuery.Create(Application);
try
// define DatabaseName e QryName via codificação
TmpQry.Connection := QryItens.Connection;
TmpQry.Name := QryItens.Name;
TmpQry.Open;
TmpQry.FindField(QryPedidosCodigoPedido.AsString);
Total := 0; // inicializa a variavel totalizadora
while (not TmpQry.Eof) and
(TmpQry.FieldByName('NumeroPedido').AsInteger = QryPedidosCodigoPedido.AsInteger) do
begin
// Acumula o Total da linha
Total := Total + (TmpQry.FieldByName('PrecoUni').AsCurrency * TmpQry.FieldByName('Quantidade').AsFloat);
TmpQry.Next; // próximo registro
end;
finally
TmpQry.Close; // fecha a tabela
TmpQry.Free; // libera objeto da memória
end;
StaticTextTotal.Caption := FormatCurr('###,###,##0.00', Total);
end;
procedure TCPedidos.QryItensCodigoProdutoValidate(Sender: TField);
begin
if QryItensCodigoProduto.AsString <> '' then
begin
if QryItensCodigoProduto.AsString <> '' then
QryItensPrecoUni.AsCurrency := QryProdutos.FieldByName('PrecoUni').AsCurrency
else
begin
ShowMessage('Código inválido');
Abort;
end;
end;
end;
procedure TCPedidos.QryPedidosDataCadastroSetText(Sender: TField;
const Text: String);
begin
if Text = ' / / ' then
Sender.Clear // apaga o campo data
else
// atribui a data digitada ao campo
try
Sender.AsString := Text;
except
ShowMessage('Data inválida!');
end;
end;
procedure TCPedidos.SpdBtnIncluirClick(Sender: TObject);
begin
AtivarControles(True); // ativa os controles para digitação
QryPedidos.Append; // inclui um novo registro na tabela
DBLookupComboBoxNomeCliente.SetFocus;
end;
procedure TCPedidos.SpdBtnAlterarClick(Sender: TObject);
begin
if QryPedidos.IsEmpty then
begin
// a tabela está vazia, então devemos incluir
SpdBtnIncluir.Click; // executa o click no botão
Exit; // retorna
end;
AtivarControles(True); // ativa os controles para digitação
QryPedidos.Edit; // permite alterar os dados
DBLookupComboBoxNomeCliente.SetFocus;
end;
procedure TCPedidos.SpdBtnExcluirClick(Sender: TObject);
begin
if Application.MessageBox('Deseja excluir este pedido?','Confirme',
MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2) = IDNO then
Exit; // retorna (sem fazer nada)
// devemos excluir os itens primeiro, para não termos
// registros órfãos
try
QryItens.First; // posiciona no primeiro item
while not QryItens.Eof do // executa até o fim do arquivo
begin
QryItens.Delete; // exclui o item
QryItens.First;
end;
QryPedidos.Delete; // exclui o pedido
except
ShowMessage('Ocorreu um erro durante a exclusão do pedido');
end;
end;
procedure TCPedidos.SpdBtnGravarClick(Sender: TObject);
begin
if QryPedidosCodigoPedido.AsInteger <= 0 then
begin
ShowMessage('Digite o número do pedido!');
DBEditCodigoPedido.Enabled := true;
DBEditCodigoPedido.SetFocus;
end
else if QryPedidosDataCadastro.IsNull then
begin
ShowMessage('Digite a data do pedido!');
DBEditDataCadastro.SetFocus;
end
else if QryPedidosNomeCliente.AsString = '' then
begin
// procura pelo cliente usando o código
if QryPedidosNomeCliente.AsString <> '' then
begin
ShowMessage('Código de cliente inválido!');
DBEditCodigoCliente.SetFocus;
end
else
begin
QryPedidos.Post;
if QryItens.State in [dsInsert,dsEdit] then
QryItens.Post;
AtivarControles(False); // desativa os controles
end;
end
else
begin
ShowMessage('Digite o código do cliente!');
DBEditCodigoCliente.SetFocus;
end;
QryPedidos.Post;
if QryItens.State in [dsInsert,dsEdit] then
QryItens.Post;
AtivarControles(False); // desativa os controles
end;
procedure TCPedidos.SpdBtnCancelarClick(Sender: TObject);
begin
QryPedidos.Cancel; // cancela inclusão/alteração
AtivarControles(False); // desativa os controles
end;
procedure TCPedidos.QryPedidosNewRecord(DataSet: TDataSet);
begin
QryPedidosDataCadastro.AsDateTime := Date; //inicia com a data atual
end;
procedure TCPedidos.QryItensNewRecord(DataSet: TDataSet);
begin
QryItensQuantidade.AsFloat := 1;
DBGridItens.SelectedIndex := 0; //código
end;
procedure TCPedidos.QryItensCalcFields(DataSet: TDataSet);
begin
if (QryItensQuantidade.AsFloat > 0) and
(QryItensPrecoUni.AsCurrency > 0) then
QryItensTotal.AsCurrency := QryItensPrecoUni.AsCurrency * QryItensQuantidade.AsFloat;
RecalculaPedido; // recalcula e exibe novamente
end;
procedure TCPedidos.QryItensBeforeInsert(DataSet: TDataSet);
begin
if QryPedidosCodigoPedido.AsString = '' then
begin
if QryPedidos.State = dsInsert then
begin
// grava para salvar o número do pedido na tabela pai
QryPedidos.Post;
// ativa a alteração novamente
QryPedidos.Edit;
end;
end;
end;
procedure TCPedidos.QryItensBeforePost(DataSet: TDataSet);
begin
if QryItensNumeroPedido.AsString = '' then
QryItensNumeroPedido.AsInteger := QryPedidosCodigoPedido.AsInteger;
if QryItensCodigoProduto.AsString = '' then
begin
DBGridItens.SelectedIndex := 0; // seleciona a coluna código
ShowMessage('Código do produto deve ser informado!');
Abort; // interrompe a gravação
end;
if QryItensQuantidade.AsFloat <= 0 then
begin
DBGridItens.SelectedIndex := 2; // seleciona coluna quantidade
ShowMessage('Código do produto deve ser informado!');
Abort; // interrompe a gravação
end;
end;
procedure TCPedidos.DBGridItensKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
// muda para a próxima coluna se pressionar Enter
if Key = VK_RETURN then // pressionou ENTER
begin
case DBGridItens.SelectedIndex of
0: DBGridItens.SelectedIndex := 2; //quantidade
1: DBGridItens.SelectedIndex := 2; //quantidade
2: DBGridItens.SelectedIndex := 3; //preço
else
DBGridItens.SelectedIndex := 0; //código
QryItens.Next;
if QryItens.Eof then
QryItens.Append;
end;
end;
end;
end.
Pergunta
Carlos Rocha
estava usado o compmnente table num cadastro de pedidos, e resolvi trocar o table pelo componente zquery.
Na migração, foi tudo bem porem, quando abro o formulario, da uma mensagen de "sql error: query was empty".
mas não consigo matar esse erro. obs: o codigo compila certinho.
segue o codigo que estou usando. se alguém puder me ajudar, muito obrigado
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.