Gravar dados usando o Insert into do SQL com Query?

Delphi

28/11/2006

pessoal estou tentando aprender como incluir dados usando o SQL, mais nao esta funcionando o codigo abaixo
begin
with dm.ibq1 do
        begin
          sql.clear;
          sql.add(´select * from sind2´);
          sql.add(´WHERE (matricula = :pmatricula)´);
          parambyname(´pmatricula´).asString := e1.text;
end;
if DM.ibq1.RecordCount > 0 then begin
showmessage(´Exception 1 RESTRIÇÃO Campo Matrícula já existe, Erro na Gravação! Tente Novamente!´);
dm.iBQ1.CLOSE;
dm.IBQ1.OPEN;
E1.SETFOCUS;
end else begin
{comandos de inserção }
if application.messagebox(Pchar(´Deseja Incluir este Associado:´ + #13+ dm.ibq1.FieldByName(´matricula´).AsString +´  ´+ 13+ dm.ibq1.FieldByName(´associado´).AsString), Pchar(´Incluir Dados´+Self.Caption), MB_ICONQUESTION
+ MB_YESNO) = IDYES then begin
    //Close;
    dm.ibq1.sql.clear;
    dm.ibq1.sql.Add(´Insert into sind2´);
    dm.ibq1.sql.Add(´matricula, admissao, associado, natural, estado, dtnas, estado, dtnas, estcivil,´);
    dm.ibq1.sql.Add(´conjuge, ctps, serie, prevsoc, te, reserv, residencia, pai, mae, nacpai, nacmae,´);
    dm.ibq1.sql.Add(´propried, prorpiet, endereco, dtadm, empreg, propri, arrend, boiaf, funcao, remun´);
    dm.ibq1.sql.add(´values´);
    dm.ibq1.sql.Add(´:matricula, :admissao, :associado, :natural, :estado, :dtnas, :estado, :dtnas, :estcivil,´);
    dm.ibq1.sql.Add(´:conjuge, :ctps, :serie, :prevsoc, :te, :reserv, :residencia, :pai, :mae, :nacpai, :nacmae,´);
    dm.ibq1.sql.Add(´:propried, :prorpiet, :endereco, :dtadm, :empreg, :propri, :Arrend, :boiaf, :funcao, :remun´);

    dm.ibq1.ParamByName(´matricula´).AsString:=e1.text;
    dm.ibq1.ParamByName(´admissao´).AsString:=e2.text;
    dm.ibq1.ParamByName(´associado´).AsString:=e3.text;
    dm.ibq1.ParamByName(´natural´).AsString:=e4.text;
    dm.ibq1.ParamByName(´estado´).AsString:=e5.text;
    dm.ibq1.ParamByName(´dtnas´).Value:=StrToDate(e6.text);
    dm.ibq1.ParamByName(´estcivil´).AsString:=e7.text;
    dm.ibq1.ParamByName(´conjuge´).AsString:=e8.text;

    dm.ibq1.ParamByName(´ctps´).AsString:=e9.text;
    dm.ibq1.ParamByName(´serie´).AsString:=e10.text;
    dm.ibq1.ParamByName(´prevsoc´).AsString:=e11.text;
    dm.ibq1.ParamByName(´te´).AsString:=e12.text;
    dm.ibq1.ParamByName(´reserv´).AsString:=e13.text;
    dm.ibq1.ParamByName(´residencia´).AsString:=e14.text;
    dm.ibq1.ParamByName(´pai´).AsString:=e15.text;

    dm.ibQ1.Parambyname(´mae´).AsString:=e16.text;
    dm.ibQ1.Parambyname(´nacpai´).AsString:=e17.text;
    dm.ibQ1.Parambyname(´nacmae´).AsString:=e18.text;

    dm.ibQ1.Parambyname(´propried´).AsString:=e19.text;
    dm.ibQ1.Parambyname(´propriet´).AsString:=e20.text;
    dm.ibQ1.Parambyname(´endereco´).AsString:=e21.text;
    dm.ibQ1.Parambyname(´dtadm´).Value:=StrToDate(e22.text);
    if e23.checked = true then
       dm.ibQ1.Parambyname(´empreg´).AsString:=´X´;
    if e24.checked = true then
       dm.ibQ1.Parambyname(´propri´).AsString:=´X´;
    if e25.checked = true then
       dm.ibQ1.Parambyname(´arrend´).AsString:=´X´;
    if e26.checked = true then
       dm.ibQ1.Parambyname(´boiaf´).AsString:=´X´;

    dm.ibQ1.Parambyname(´funcao´).AsString:=e27.text;
    dm.ibQ1.Parambyname(´remun´).value:=e28.text;

    try
      dm.ibq1.ExecSql;
      dm.ibt2.commit;
      dm.ibq1.close;
      dm.ibq1.sql.clear;
      dm.ibq1.sql.text := ´select * from sind2´;
      dm.ibq1.Open;

      sbar.SimpleText := ´Dados Incluídos...´;
      b1.setfocus;
    except
      On E:Exception do begin
        dm.ibt2.Rollback;
        sbar.SimpleText := ´Abortado...´;
        Showmessage(´Falha na Inclusão dos Dados!´#1310´Mensagem: ´+E.Message);
      end;
    end;
 end;
end;


Pq nao grava, e tambem nao me da mensagem de erro algum? :(


Adriano_servitec

Adriano_servitec

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

28/11/2006

tente assim:
var
  instrucao: string;
begin
  with dm.ibq1 do
  begin
    close;
    sql.text := ´select * from sind2 where (matricula = :pmatricula)´;
    parambyname(´pmatricula´).asString := e1.text;
    open; // faltou essa linha

    // não use RecordCount, a menos que você queira
    // saber exatamente quantos registros foram retornados
    if not IsEmpty then
    begin
      Close;
      showmessage(´Exception 1 RESTRIÇÃO Campo Matrícula já existe, Erro na Gravação! Tente Novamente!´);
      E1.SETFOCUS;
    end
    else
    {comandos de inserção }
    if application.messagebox(
      Pchar(´Deseja Incluir este Associado:´ + #13+e1.text+´ ´+13+e3.text),
      Pchar(´Incluir Dados ´+Self.Caption),
      MB_ICONQUESTION + MB_YESNO) = IDYES then
    begin
      Close;
      sql.text :=
        ´Insert into sind2 ´+
        ´ (matricula, admissao, associado, natural, estado, dtnas, estado, ´+
        ´ dtnas, estcivil, conjuge, ctps, serie, prevsoc, te, reserv, ´+
        ´ residencia, pai, mae, nacpai, nacmae, propried, prorpiet, ´+
        ´ endereco, dtadm, empreg, propri, arrend, boiaf, funcao, remun) ´+
        ´values ´+
        ´ (:matricula, :admissao, :associado, :natural, :estado, :dtnas, :estado, ´+
        ´ :dtnas, :estcivil, :conjuge, :ctps, :serie, :prevsoc, :te, :reserv, ´+
        ´ :residencia, :pai, :mae, :nacpai, :nacmae, :propried, :prorpiet, ´+
        ´ :endereco, :dtadm, :empreg, :propri, :Arrend, :boiaf, :funcao, :remun)´;
      ParamByName(´matricula´).AsString:=e1.text;
      ParamByName(´admissao´).AsString:=e2.text;
      ParamByName(´associado´).AsString:=e3.text;
      ParamByName(´natural´).AsString:=e4.text;
      ParamByName(´estado´).AsString:=e5.text;
      ParamByName(´dtnas´).Value:=StrToDate(e6.text);
      ParamByName(´estcivil´).AsString:=e7.text;
      ParamByName(´conjuge´).AsString:=e8.text;

      ParamByName(´ctps´).AsString:=e9.text;
      ParamByName(´serie´).AsString:=e10.text;
      ParamByName(´prevsoc´).AsString:=e11.text;
      ParamByName(´te´).AsString:=e12.text;
      ParamByName(´reserv´).AsString:=e13.text;
      ParamByName(´residencia´).AsString:=e14.text;
      ParamByName(´pai´).AsString:=e15.text;

      Parambyname(´mae´).AsString:=e16.text;
      Parambyname(´nacpai´).AsString:=e17.text;
      Parambyname(´nacmae´).AsString:=e18.text;

      Parambyname(´propried´).AsString:=e19.text;
      Parambyname(´propriet´).AsString:=e20.text;
      Parambyname(´endereco´).AsString:=e21.text;
      Parambyname(´dtadm´).Value:=StrToDate(e22.text);

      if e23.checked then
        Parambyname(´empreg´).AsString:=´X´;

      if e24.checked then
        Parambyname(´propri´).AsString:=´X´;

      if e25.checked then
        Parambyname(´arrend´).AsString:=´X´;

      if e26.checked then
        Parambyname(´boiaf´).AsString:=´X´;

      Parambyname(´funcao´).AsString:=e27.text;
      Parambyname(´remun´).value:=e28.text;

      try
        ExecSql;
        dm.ibt2.commit;
        close;
        sql.text := ´select * from sind2´;
        Open;

        sbar.SimpleText := ´Dados Incluídos...´;
        b1.setfocus;
      except
        On E:Exception do
        begin
          dm.ibt2.Rollback;
          sbar.SimpleText := ´Abortado...´;
          Showmessage(´Falha na Inclusão dos Dados!´#1310´Mensagem: ´+E.Message);
        end;
      end;
    end;
  end;
end;



GOSTEI 0
Adriano_servitec

Adriano_servitec

28/11/2006

Bom dia Emerson.En. Obrigado mais uma vez por responder minha duvida.
sql.text := ´select * from sind2 where (matricula = :pmatricula)´; parambyname(´pmatricula´).asString := e1.text; open; // faltou essa linha
A falta do open foi failda de atençao mesmo :oops:

Bom surgiu um pequeno problema que nao estou entendendo com o campo [b:ea30c7628a]NATURAL[/b:ea30c7628a]
No banco de dados criei este campo [b:ea30c7628a]NATURAL sendo VARCHAR 35 (Firebird 2.0)[/b:ea30c7628a]
Ai no SQL esta assim
[b:ea30c7628a]sql.text :=
´Insert into sind2 ´+
´ (matricula, admissao, associado, [color=red:ea30c7628a]natural[/color:ea30c7628a], estado, dtnas, estado, ´+[/b:ea30c7628a]
e no value do SQL assim
[b:ea30c7628a] ´values ´+
´ (:matricula, :admissao, :associado, [color=blue:ea30c7628a]:natural[/color:ea30c7628a], :estado, :dtnas, :estado, ´+[/b:ea30c7628a]
e na passagem de parametros assim
ParamByName(´natural´).AsString:=e4.text; 


Nao vi nenhum erro, mais aparece a seguinte mensagem de erro de script do SQL
Falha na Inclusão de Dados, Mengagem: Dynamic SQL Error, SQL Error code -104, Token Unknown -Line 1, Column 53 ´NATURAL´


Bom apartir dai nao grava e fica nessa mensagem, tambem nao sei se existe problemas com os demais campos pois ainda nao passou por esse.

Desde ja agradeço a ajuda;
Adriano


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/11/2006

acho que não dá certo porque [b:78732de96d]NATURAL é uma palavra reservada do Firebird[/b:78732de96d]. troque o nome do campo para NaturalDe ou Naturalidade. assim deve funcionar.


GOSTEI 0
Adriano_servitec

Adriano_servitec

28/11/2006

acho que não dá certo porque [b:a0a1cc619a]NATURAL é uma palavra reservada do Firebird[/b:a0a1cc619a]. troque o nome do campo para NaturalDe ou Naturalidade. assim deve funcionar.


Obrigado Emerson por respodner, pelo visto [b:a0a1cc619a]RESERV[/b:a0a1cc619a] tambem eh reservado ao Firebird :D [b:a0a1cc619a]Vou trocar pra ver se funciona[/b:a0a1cc619a]

Valeu pela ajuda amigo.


GOSTEI 0
Adriano_servitec

Adriano_servitec

28/11/2006

E este erro o que significa?

[b:04be588d6e]Falha na Inclusão de Dados, Mengagem: Dynamic SQL Error, SQL Error code -206, Column SIND2.ESTADO, cannot repeated in insert statement at line 1 column 79[/b:04be588d6e]


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/11/2006

é que [b:4a3389b0a0]o campo estado aparece duas vezes na instrução[/b:4a3389b0a0], antes e depois de [i:4a3389b0a0]dtnas[/i:4a3389b0a0]:
      sql.text := 
        ´Insert into sind2 ´+ 
        ´ (matricula, admissao, associado, natural, estado, dtnas, estado, ´+ 
        ´ dtnas, estcivil, conjuge, ctps, serie, prevsoc, te, reserv, ´+ 
        ´ residencia, pai, mae, nacpai, nacmae, propried, prorpiet, ´+ 
        ´ endereco, dtadm, empreg, propri, arrend, boiaf, funcao, remun) ´+ 
        ´values ´+ 
        ´ (:matricula, :admissao, :associado, :natural, :estado, :dtnas, :estado, ´+ 
        ´ :dtnas, :estcivil, :conjuge, :ctps, :serie, :prevsoc, :te, :reserv, ´+ 
        ´ :residencia, :pai, :mae, :nacpai, :nacmae, :propried, :prorpiet, ´+ 
        ´ :endereco, :dtadm, :empreg, :propri, :Arrend, :boiaf, :funcao, :remun)´;


altere para:
      sql.text := 
        ´Insert into sind2 ´+ 
        ´ (matricula, admissao, associado, natural, estado, dtnas, ´+ 
        ´ dtnas, estcivil, conjuge, ctps, serie, prevsoc, te, reserv, ´+ 
        ´ residencia, pai, mae, nacpai, nacmae, propried, prorpiet, ´+ 
        ´ endereco, dtadm, empreg, propri, arrend, boiaf, funcao, remun) ´+ 
        ´values ´+ 
        ´ (:matricula, :admissao, :associado, :natural, :estado, :dtnas, ´+ 
        ´ :dtnas, :estcivil, :conjuge, :ctps, :serie, :prevsoc, :te, :reserv, ´+ 
        ´ :residencia, :pai, :mae, :nacpai, :nacmae, :propried, :prorpiet, ´+ 
        ´ :endereco, :dtadm, :empreg, :propri, :Arrend, :boiaf, :funcao, :remun)´;



GOSTEI 0
Rinez

Rinez

28/11/2006

Oi Pessoal ...
Lendo o tópico do Adriano_Servitec sobre o Insert me veio a seguinte pergunta: Como consigo as palavras reservadas do Firebird 1.5?
Alguém pode nos esclarecer?


GOSTEI 0
Adriano_servitec

Adriano_servitec

28/11/2006

Obrigado mais uma vez amigo por me ajudar e corrigir amigo, agora era de novo falta de atençao, ainda tinha essa linha repetida [b:b994173f77]dtnas, ´+
´ dtnas[/b:b994173f77]

Agora sim ta 100¬, valeu mesmo.


GOSTEI 0
POSTAR