varrendo e quot;Editandoquot; os registros de uma tabela

21/03/2006

O código abaixo teria que fazer o seguinte teóricamente:
- Gostaria de trocar os dados que exitem na tabela materiais, referente aos campos ´tipo de materiais´, ´Autores´, ´Editoras´ e ´Areas´
Atualmente nesses campos estão os nomes de tais referencias do tipo ´Autor = CLube Delphi´... gostaria de ir na tabela autores, fazer uma
verificação de qual é o código do autor ´clube delphi´..
- Em seguida aloco esse código numa vaiavel, excluo o registro atual da tabela materiais ´em um IBDataSet diferente´ e insiro ao invés do nome do autor, o código.
- Fasso isso para todos os campos da tabela acima citado.
- Nao estou dando um Tabela.Edit, por que nao está funcionando comigo aqui, entao estou fazendo assim, só que nao não acontece nada... os registros continuam
iguaizinhos estavam...

Componentes usados: IBDataSet, IBTransaction, IBDatabase, DataSource
Delphi: 7
Banco: Firebird 1.5
Campos da tabela:
-----------------
´CODIGO´INTEGER NOT NULL,
´REFERENCIA´VARCHAR(11) NOT NULL,
´NOME´VARCHAR(100) NOT NULL,
´QUANTIDADE´VARCHAR(50),
´TIPO´VARCHAR(50),
´AUTOR´VARCHAR(100),
´SINOPSE´VARCHAR(1000),
´EDITORA´VARCHAR(50),
´EXEMPLAR´VARCHAR(50),
´VOLUME´VARCHAR(50),
´EDICAO´VARCHAR(50),
´ANO_EDICAO´VARCHAR(50),
´LOCAL´VARCHAR(50),
´AREA´VARCHAR(50),
´STATUS´VARCHAR(50),
´RESERVA´VARCHAR(50),
CONSTRAINT ´PK_LIVROS´ PRIMARY KEY (´CODIGO´)

Bom espero ter sido claro, se alguem puder me ajudar a achar o problema nesse código agradeceria e muito

procedure TForm1.Button1Click(Sender: TObject);
var
Codigo,Referencia,Nome,Quantidade,Sinopse,Exemplar,Volume,Edicao,Ano_Edicao,Local : String;
ti, ti2, au, au2, ed, ed2, ar, ar2, co : String;
begin
    Tbl_Materiais.First;
    while not Tbl_Materiais.Eof do
    begin
        Ti := Tbl_MateriaisTIPO.AsString;
        Tbl_Tipo.Close;
        Tbl_Tipo.SelectSQL.Clear;
        Tbl_Tipo.SelectSQL.Add(´SELECT * from TIPO_MATERIAL WHERE TIPO = :Tipo´);
        Tbl_Tipo.ParamByName(´Tipo´).AsString:=Ti;
        Tbl_Tipo.Open;
        ti2 := Tbl_TipoCODIGO.AsString;

        Au := Tbl_MateriaisAUTOR.AsString;
        Tbl_Autores.Close;
        Tbl_Autores.SelectSQL.Clear;
        Tbl_Autores.SelectSQL.Add(´SELECT * from Autores WHERE AUTOR = :Autor´);
        Tbl_Autores.ParamByName(´Autor´).AsString:=Au;
        Tbl_Autores.Open;
        Au2 := Tbl_AutoresCODIGO.AsString;

        Ed := Tbl_MateriaisEDITORA.AsString;
        Tbl_Editoras.Close;
        Tbl_Editoras.SelectSQL.Clear;
        Tbl_Editoras.SelectSQL.Add(´SELECT * from Editoras WHERE EDITORA = :Editora´);
        Tbl_Editoras.ParamByName(´Editora´).AsString:=Ed;
        Tbl_Editoras.Open;
        Ed2 := Tbl_AutoresCODIGO.AsString;

        Ar := Tbl_MateriaisAREA.AsString;
        Tbl_Areas.Close;
        Tbl_Areas.SelectSQL.Clear;
        Tbl_Areas.SelectSQL.Add(´SELECT * from Area WHERE NOME = :Area´);
        Tbl_Areas.ParamByName(´Area´).AsString:=Ar;
        Tbl_Areas.Open;
        Ar2 :=  Tbl_AreasCODIGO.AsString;


        Codigo      := Tbl_MateriaisCODIGO.AsString;
        Referencia  := Tbl_MateriaisREFERENCIA.AsString;
        Nome        := Tbl_MateriaisNOME.AsString;
        Quantidade  := Tbl_MateriaisQUANTIDADE.AsString;
        Sinopse     := Tbl_MateriaisSINOPSE.AsString;
        Exemplar    := Tbl_MateriaisEXEMPLAR.AsString;
        Volume      := Tbl_MateriaisVOLUME.AsString;
        Edicao      := Tbl_MateriaisEDICAO.AsString;
        Ano_Edicao  := Tbl_MateriaisANO_EDICAO.AsString;
        Local       := Tbl_MateriaisLOCAL.AsString;

        // exclui
        Co := Tbl_MateriaisCODIGO.AsString;
        Tbl_Exclui_Ma.Close;
        Tbl_Exclui_Ma.SelectSQL.Clear;
        Tbl_Exclui_Ma.SelectSQL.Add(´Delete From LIVROS Where CODIGO = :Cod´);
        Tbl_Exclui_Ma.Params[0&93;.AsString;
        Tbl_Exclui_Ma.ParamByName(´Cod´).AsString:=Co;
        Tbl_Exclui_Ma.ExecSql;


        Tbl_Materiais.Open;
        Tbl_Materiais.Insert;

        Tbl_MateriaisCODIGO.AsString      := Codigo;
        Tbl_MateriaisREFERENCIA.AsString  := Referencia;
        Tbl_MateriaisNOME.AsString        := Nome;
        Tbl_MateriaisQUANTIDADE.AsString  := Quantidade;
        Tbl_MateriaisTIPO.AsString        := Ti2;
        Tbl_MateriaisAUTOR.AsString       := Au2;
        Tbl_MateriaisSINOPSE.AsString     := Sinopse;
        Tbl_MateriaisEDITORA.AsString     := Ed2;
        Tbl_MateriaisEXEMPLAR.AsString    := Exemplar;
        Tbl_MateriaisVOLUME.AsString      := Volume;
        Tbl_MateriaisANO_EDICAO.AsString  := Ano_Edicao;
        Tbl_MateriaisLOCAL.AsString       := Local;
        Tbl_MateriaisAREA.AsString        := Ar2;

        Tbl_Materiais.Post;
        Tbl_Materiais.ApplyUpdates;

        Tbl_Materiais.Next;

    end;
end;



Mahdak