Consulta SQL

Delphi

26/04/2005

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:
----------------------------------------------
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

Mahdak

Curtidas 0

Respostas

Rjun

Rjun

26/04/2005

Seria bom você postar as mensagens de erro.


GOSTEI 0
Juliopedroni

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...


GOSTEI 0
Mahdak

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:
---------------------------------------------------------
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

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

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!

------------------


GOSTEI 0
Juliopedroni

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...


GOSTEI 0
Mahdak

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!


GOSTEI 0
POSTAR