Consulta SQL
Ola pessoal, estou com um problema na unit emprestimo quando vou fazer uma consulta sql para checar se alunos podem pegar livros e tal... ja to com a cabeça fervendo e o sistema só me gera erro em cima de erro. estou postando aqui sem esperanças, mas caso alguem possa me ajudar ficarei muito grato... :)
Abraços...
segue o codigo abaixo:
----------------------------------------------
Abraços...
segue o codigo abaixo:
----------------------------------------------
procedure TEmprestimo.Btn_SalvarClick(Sender: TObject);
var
a,b,c,d : String;
// variaveis responsaveis pela soma da data
e,m,y : word;
i : byte;
Data : TDateTime;
begin
// se o emprestimo for para aluno
if combo_tipo.Text = ´ALUNO´ then
begin
//select count( * ) from TABELA_emprestimo where Codigo_Aluno = edit_codigo.text
// seleciona todos os emprestimos que aquele aluno tem
if Edit_codigoAL.Text <>´´ Then
begin
Dm.Tbl_Emprestimos.Close;
Dm.Tbl_Emprestimos.SelectSQL.Clear;
a:=´select * From Emprestimo ´;
b:=´Where COD_ALUNO =´+Edit_codigoAL.Text;
Dm.Tbl_Emprestimos.SelectSQL.Add(a+b);
Dm.Tbl_Emprestimos.Open;
end;
// Verifica o tipo de consulta (AQUI TA DANDO ERRO!!!)
if Combo_TipoConsulta.Text <>´´ Then
begin
Dm.Tbl_TipoConsulta.Close;
Dm.Tbl_TipoConsulta.SelectSQL.Clear;
c:=´select * from TIPO_CONSULTA ´;
d:=´Where TIPO =´+Combo_TipoConsulta.Text;
Dm.Tbl_TipoConsulta.SelectSQL.Add(c+d);
Dm.Tbl_TipoConsulta.Open;
end;
if Dm.Tbl_Emprestimos.RecordCount >= Dm.Tbl_TipoConsultaMAX_RESERVA_ALUNO.AsInteger then
begin
ShowMessage(´Aluno ja possui o limite ou mais do que o permitido´);
end
else
begin
{AQUI TAMBEM TA DANDO ERRO}
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Dia(s)´ then
begin
//Rotina que gera a data da devolução.
for i := 1 to 1 do begin
Data := Date + (Dm.Tbl_TipoConsultaTEMPO.AsInteger * i);
DecodeDate(Data,y,m,e);
Edit_DataDev.Text := DateToStr(Data);
end;
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Semana(s)´ then
begin
//Rotina que gera a data da devolução.
for i := 1 to 7 do begin
Data := Date + (Dm.Tbl_TipoConsultaTEMPO.AsInteger * i);
DecodeDate(Data,y,m,e);
Edit_DataDev.Text := DateToStr(Data);
end;
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Hora(s)´ then
begin
Edit_DataDev.Text := FormatDateTime(´dd"/"mm"/"yyy´,Date);
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Minuto(s)´ then
begin
Edit_DataDev.Text := FormatDateTime(´dd"/"mm"/"yyy´,Date);
end;
//-----------------------------------------------------
//ShowMessage(´Aluno está OK´);
// try
If Not(DM.Tr_Emprestimos.InTransaction) Then
DM.Tr_Emprestimos.StartTransaction;
Dm.Tbl_Emprestimos.Open;
Dm.Tbl_Emprestimos.insert;
Dm.Tbl_Emprestimos.FieldByName(´Codigo´).AsInteger := StrToInt(Edit_Codigo.Text);
Dm.Tbl_Emprestimos.FieldByName(´COD_ALUNO´).AsInteger := StrToInt(Edit_CodigoAl.Text);
Dm.Tbl_Emprestimos.FieldByName(´COD_LIVRO´).AsInteger := StrToInt(Edit_CodigoLivro.Text);
Dm.Tbl_Emprestimos.FieldByName(´TIPO_EMPR´).AsString := Emprestimo.Combo_Tipo.text;
Dm.Tbl_Emprestimos.FieldByName(´TIPO_CONS´).AsString := Emprestimo.Combo_TipoConsulta.text;
Dm.Tbl_Emprestimos.FieldByName(´DATA_EMPR´).AsString := Emprestimo.Edit_DataEmpr.text;
Dm.Tbl_Emprestimos.FieldByName(´DATA_DEV´).AsString := Emprestimo.Edit_DataDev.text;
Dm.Tbl_Emprestimos.post;
Dm.Tbl_Emprestimos.ApplyUpdates;
Dm.Tbl_Emprestimos.Close;
ShowMessage(´Empréstimo Efetuado Com Sucesso.´);
//limpa_Edit;
Btn_Salvar.Enabled := False;
Btn_Editar.Enabled := False;
Btn_Baixar.Enabled := False;
Btn_CancelarBaixa.Enabled := False;
Btn_B1.Enabled := False;
Btn_B2.Enabled := False;
Btn_Up.Enabled := true;
Btn_Down.Enabled := true;
Edit_Disable;
// except on exception do
// begin
// ShowMessage(´Operação ilegal, verifique se nao há algum erro, ou se o Empréstimo ja não existe e tente novamente.´);
// Dm.Tbl_Emprestimos.Cancel;
// Dm.Tbl_Emprestimos.Close;
// end;
// end;
end;
end;
end;Mahdak
Curtidas 0
Respostas
Rjun
26/04/2005
Seria bom você postar as mensagens de erro.
GOSTEI 0
Juliopedroni
26/04/2005
Tente dar uma ajeitada no seu código primeiro ... segue...
//Erro
// Verifica o tipo de consulta (AQUI TA DANDO ERRO!!!)
if Combo_TipoConsulta.Text <>´´ Then
begin
Dm.Tbl_TipoConsulta.Close;
Dm.Tbl_TipoConsulta.SelectSQL.Clear;
c:=´select * from TIPO_CONSULTA ´;
d:=´Where TIPO =´+Combo_TipoConsulta.Text;
Dm.Tbl_TipoConsulta.SelectSQL.Add(c+d);
Dm.Tbl_TipoConsulta.Open;
end;
//Tente
//Ao invés de usar variáveis pra montar o comando sql, por que você não pode montar ele direto ?
//Verifique se a coluna ´TIPO´ da tabela ´TIPO_CONSULTA´ é do tipo Varchar.
if Combo_TipoConsulta.Text <>´´ Then
begin
Dm.Tbl_TipoConsulta.Close;
Dm.Tbl_TipoConsulta.SelectSQL.Clear;
Dm.Tbl_TipoConsulta.SelectSQL.Add(´select * from TIPO_CONSULTA Where TIPO = ´ + Trim(Combo_TipoConsulta.Text));
Dm.Tbl_TipoConsulta.Open;
end;
===========================================================
//Erro
//Repare que no primeiro for que aparece abaixo, ele é de 1 até 1, por q ? (Se está correto, apenas mande multiplicar por 1 nas linhas abaixo...)
//Por que a linha ´DecodeDate(Data,y,m,e)´ se você nunca usa estas variáveis ?
//Nunca vi este tipo de fomatação de datas ´FormatDateTime(´dd´/´mm´/´yyy´,Date);´ ... tente usar assim ... ´FormatDateTime(´dd/mm/yyyy´,Date);´ por que o ano com 3 dígitos apenas ?
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Dia(s)´ then
begin
//Rotina que gera a data da devolução.
for i := 1 to 1 do begin
Data := Date + (Dm.Tbl_TipoConsultaTEMPO.AsInteger * i);
DecodeDate(Data,y,m,e);
Edit_DataDev.Text := DateToStr(Data);
end;
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Semana(s)´ then
begin
//Rotina que gera a data da devolução.
for i := 1 to 7 do begin
Data := Date + (Dm.Tbl_TipoConsultaTEMPO.AsInteger * i);
DecodeDate(Data,y,m,e);
Edit_DataDev.Text := DateToStr(Data);
end;
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Hora(s)´ then
begin
Edit_DataDev.Text := FormatDateTime(´dd´/´mm´/´yyy´,Date);
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Minuto(s)´ then
begin
Edit_DataDev.Text := FormatDateTime(´dd´/´mm´/´yyy´,Date);
end;
//-----------------------------------------------------
===============================
===============================
===============================
Veja se os erros pararam e me avise ...
Falow...
//Erro
// Verifica o tipo de consulta (AQUI TA DANDO ERRO!!!)
if Combo_TipoConsulta.Text <>´´ Then
begin
Dm.Tbl_TipoConsulta.Close;
Dm.Tbl_TipoConsulta.SelectSQL.Clear;
c:=´select * from TIPO_CONSULTA ´;
d:=´Where TIPO =´+Combo_TipoConsulta.Text;
Dm.Tbl_TipoConsulta.SelectSQL.Add(c+d);
Dm.Tbl_TipoConsulta.Open;
end;
//Tente
//Ao invés de usar variáveis pra montar o comando sql, por que você não pode montar ele direto ?
//Verifique se a coluna ´TIPO´ da tabela ´TIPO_CONSULTA´ é do tipo Varchar.
if Combo_TipoConsulta.Text <>´´ Then
begin
Dm.Tbl_TipoConsulta.Close;
Dm.Tbl_TipoConsulta.SelectSQL.Clear;
Dm.Tbl_TipoConsulta.SelectSQL.Add(´select * from TIPO_CONSULTA Where TIPO = ´ + Trim(Combo_TipoConsulta.Text));
Dm.Tbl_TipoConsulta.Open;
end;
===========================================================
//Erro
//Repare que no primeiro for que aparece abaixo, ele é de 1 até 1, por q ? (Se está correto, apenas mande multiplicar por 1 nas linhas abaixo...)
//Por que a linha ´DecodeDate(Data,y,m,e)´ se você nunca usa estas variáveis ?
//Nunca vi este tipo de fomatação de datas ´FormatDateTime(´dd´/´mm´/´yyy´,Date);´ ... tente usar assim ... ´FormatDateTime(´dd/mm/yyyy´,Date);´ por que o ano com 3 dígitos apenas ?
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Dia(s)´ then
begin
//Rotina que gera a data da devolução.
for i := 1 to 1 do begin
Data := Date + (Dm.Tbl_TipoConsultaTEMPO.AsInteger * i);
DecodeDate(Data,y,m,e);
Edit_DataDev.Text := DateToStr(Data);
end;
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Semana(s)´ then
begin
//Rotina que gera a data da devolução.
for i := 1 to 7 do begin
Data := Date + (Dm.Tbl_TipoConsultaTEMPO.AsInteger * i);
DecodeDate(Data,y,m,e);
Edit_DataDev.Text := DateToStr(Data);
end;
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Hora(s)´ then
begin
Edit_DataDev.Text := FormatDateTime(´dd´/´mm´/´yyy´,Date);
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Minuto(s)´ then
begin
Edit_DataDev.Text := FormatDateTime(´dd´/´mm´/´yyy´,Date);
end;
//-----------------------------------------------------
===============================
===============================
===============================
Veja se os erros pararam e me avise ...
Falow...
GOSTEI 0
Mahdak
26/04/2005
ok, valleu pelo esclarecimento brother. agora só está dando o erro ´empty query´.
Estou colando o código modificado pra voce ver:
---------------------------------------------------------
Estou colando o código modificado pra voce ver:
---------------------------------------------------------
procedure TEmprestimo.Btn_SalvarClick(Sender: TObject);
var
// variaveis responsaveis pela soma da data
i : byte;
Data : TDateTime;
begin
// se o emprestimo for para aluno
if combo_tipo.Text = ´ALUNO´ then
begin
//select count( * ) from TABELA_emprestimo where Codigo_Aluno = edit_codigo.text
// seleciona todos os emprestimos que aquele aluno tem
if Edit_codigoAL.Text <>´´ Then
begin
Dm.Tbl_Emprestimos.Close;
Dm.Tbl_Emprestimos.SelectSQL.Clear;
Dm.Tbl_TipoConsulta.SelectSQL.Add(´select * From Emprestimo Where COD_ALUNO = ´ + Trim(Edit_codigoAL.Text));
Dm.Tbl_Emprestimos.Open;
end;
// Verifica o tipo de consulta (AQUI TAVA DANDO ERRO!!!)
if Combo_TipoConsulta.Text <>´´ Then
begin
Dm.Tbl_TipoConsulta.Close;
Dm.Tbl_TipoConsulta.SelectSQL.Clear;
Dm.Tbl_TipoConsulta.SelectSQL.Add(´select * from TIPO_CONSULTA Where TIPO = ´ + Trim(Combo_TipoConsulta.Text));
Dm.Tbl_TipoConsulta.Open;
end;
if Dm.Tbl_Emprestimos.RecordCount >= Dm.Tbl_TipoConsultaMAX_RESERVA_ALUNO.AsInteger then
begin
ShowMessage(´Aluno ja possui o limite ou mais do que o permitido´);
end
else
begin
{AQUI TAMBEM TAVA DANDO ERRO}
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Dia(s)´ then
begin
//Rotina que gera a data da devolução.
for i := 1 to 1 do begin
Data := Date + (Dm.Tbl_TipoConsultaTEMPO.AsInteger * i);
Edit_DataDev.Text := DateToStr(Data);
end;
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Semana(s)´ then
begin
//Rotina que gera a data da devolução.
for i := 1 to 1 do begin
Data := Date + (Dm.Tbl_TipoConsultaTEMPO.AsInteger * i * 7);
Edit_DataDev.Text := DateToStr(Data);
end;
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Hora(s)´ then
begin
Edit_DataDev.Text := FormatDateTime(´dd/mm/yyyy´,Date);
end;
//-----------------------------------------------------
if Dm.Tbl_TipoConsultaUNIDADE.AsString = ´Minuto(s)´ then
begin
Edit_DataDev.Text := FormatDateTime(´dd/mm/yyyy´,Date);
end;
//-----------------------------------------------------
//ShowMessage(´Aluno está OK´);
try
If Not(DM.Tr_Emprestimos.InTransaction) Then
DM.Tr_Emprestimos.StartTransaction;
Dm.Tbl_Emprestimos.Open;
Dm.Tbl_Emprestimos.insert;
Dm.Tbl_Emprestimos.FieldByName(´Codigo´).AsInteger := StrToInt(Edit_Codigo.Text);
Dm.Tbl_Emprestimos.FieldByName(´COD_ALUNO´).AsInteger := StrToInt(Edit_CodigoAl.Text);
Dm.Tbl_Emprestimos.FieldByName(´COD_LIVRO´).AsInteger := StrToInt(Edit_CodigoLivro.Text);
Dm.Tbl_Emprestimos.FieldByName(´TIPO_EMPR´).AsString := Emprestimo.Combo_Tipo.text;
Dm.Tbl_Emprestimos.FieldByName(´TIPO_CONS´).AsString := Emprestimo.Combo_TipoConsulta.text;
Dm.Tbl_Emprestimos.FieldByName(´DATA_EMPR´).AsString := Emprestimo.Edit_DataEmpr.text;
Dm.Tbl_Emprestimos.FieldByName(´DATA_DEV´).AsString := Emprestimo.Edit_DataDev.text;
Dm.Tbl_Emprestimos.post;
Dm.Tbl_Emprestimos.ApplyUpdates;
Dm.Tbl_Emprestimos.Close;
ShowMessage(´Empréstimo Efetuado Com Sucesso.´);
//limpa_Edit;
Btn_Salvar.Enabled := False;
Btn_Editar.Enabled := False;
Btn_Baixar.Enabled := False;
Btn_CancelarBaixa.Enabled := False;
Btn_B1.Enabled := False;
Btn_B2.Enabled := False;
Btn_Up.Enabled := true;
Btn_Down.Enabled := true;
Edit_Disable;
except on exception do
begin
ShowMessage(´Operação ilegal, verifique se nao há algum erro, ou se o Empréstimo ja não existe e tente novamente.´);
Dm.Tbl_Emprestimos.Cancel;
Dm.Tbl_Emprestimos.Close;
end;
end;
end;
end;
end;
GOSTEI 0
Rjun
26/04/2005
Dm.Tbl_Emprestimos.SelectSQL.Clear;
Dm.Tbl_TipoConsulta.SelectSQL.Add(´select * From Emprestimo Where COD_ALUNO = ´ + Trim(Edit_codigoAL.Text));
Dm.Tbl_Emprestimos.Open;
Você esta dando um Clear em tbl_Emprestimo mas esta dando um Add em tbl_TipoConsulta.
GOSTEI 0
Mahdak
26/04/2005
isso, desculpa pelo engano...
ta dando o mesmo erro ainda, a na consulta SQL da tabela TipoConsulta. o campo aquele que vc pediu para verificar eh varchar, e o erro é o seguinte:
[ Dinamic SQL error SQL error code = -206 COLLUMN UNKNOW EMPRESTIMO at line 1, column 42]
Abraços!
------------------
ta dando o mesmo erro ainda, a na consulta SQL da tabela TipoConsulta. o campo aquele que vc pediu para verificar eh varchar, e o erro é o seguinte:
[ Dinamic SQL error SQL error code = -206 COLLUMN UNKNOW EMPRESTIMO at line 1, column 42]
Abraços!
------------------
GOSTEI 0
Juliopedroni
26/04/2005
Bom, como você disse que o campo é Varchar, faltou colocar as aspas no comando, tente assim :
Dm.Tbl_TipoConsulta.SelectSQL.Add(´select * from TIPO_CONSULTA Where TIPO = ´´´ + Trim(Combo_TipoConsulta.Text) + ´´´´);
Me avise se funcionou...
Falow...
Dm.Tbl_TipoConsulta.SelectSQL.Add(´select * from TIPO_CONSULTA Where TIPO = ´´´ + Trim(Combo_TipoConsulta.Text) + ´´´´);
Me avise se funcionou...
Falow...
GOSTEI 0
Mahdak
26/04/2005
valleu irmão, deu certo sim agora... eu te adicionei no msn, o meu msn eh : jpxst@hotmail.com.
Abraços!
Abraços!
GOSTEI 0