Fórum Como Inserir Registro Novo. #39740

28/10/2003

0

Não estou conseguindo inserir um registro novo em uma tabela.
Já postei algumas vezes e pelas respostas que obtive não consegui resolver meu problema talvez eu não tenha sido bem claro.

Estou usando interbase e delphi 6.
Tenho o seguinte banco: PRINCIPAL com a tabela OCORRENCIA
Na tabela OCORRENCIA tenho os seguintes campos:

Create table
(
codigo integer not null,
data date,
hora time,
primary key (codigo)
);

Criei um generator:
CREATE GENERATOR CODIGO_GEN;
SET GENERATO CODIGO_GEN TO 1;
e atribui na propriedade FieldsGenerator do IbDataset


Esta tabela é acessada por meio de:
IBdatabase
IBtransaction
IBdataset
IBdatasource

Dbnavigator
Dbedit

Preciso inserir um registro nesta tabela quando um botão é pressionado.
Com os dados DATA e HORA. Os dados que serão inseridos na data e na hora podem estar um edits ou em variáveis.

Dúvidas:
-É absolutamente necessário ter chave primária?
-Não estou conseguindo achar o local adequado para colocar o comando sql INSERT INTO....


Latrodectrus

Latrodectrus

Responder

Posts

28/10/2003

Afarias

|Estou usando interbase e delphi 6.

Já atualizou o IBX??? não?? FAÇA-O!!


|SET GENERATO CODIGO_GEN TO 1;

Esse código é desnecessário! (bom, deve ser)


|e atribui na propriedade FieldsGenerator do IbDataset

GeneratorField


|Preciso inserir um registro nesta tabela quando um botão é pressionado.
|Com os dados DATA e HORA. Os dados que serão inseridos na data e na
|hora podem estar um edits ou em variáveis.

with IBDataSet do
begin
Append;
FieldByName(´DATA´).AsDate := variavel_date;
FieldByName(´HORA´).AsTime := variavel_time;
Post;
end;


|-É absolutamente necessário ter chave primária?

SIM (mesmo q tecnicamente não!)


|Não estou conseguindo achar o local adequado para colocar o comando
|sql INSERT INTO....


Coloque o SELECT na propriedade SELECTSQL e dê clique com o botão direito sobre o componente IBDataSet - no menu selecione ´Dataset Editor´ -- vc verá duas colunas com campos a lista dos campos -- na esquerda (key fields) selecione apenas sua chave primária (código) e na da direita (update fields) selecione todos os campos.

Então clique em GENERATE SQL -- pronto!! o Update, Delete, Insert e Refresh foi criado!


T+


Responder

Gostei + 0

28/10/2003

Latrodectrus

na verdade se existisse uma maneira de incluir um registro em branco na tabela já resolveria meu problema.
Que fosse apenas incrementado o valor da chave primária. E os outros campos todos com valor null.
Tem como fazer isso?


Responder

Gostei + 0

29/10/2003

Afarias

with IBDataSet do
begin
Append;
Post;
end;


ou vc pode usar um INSERT em um IBSQL ::

with IBSQL1 do
try
Transaction.StartTransaction;
SQL.Text := ´INSERT INTO tabela (CODIGO) VAlUES (GEN_ID(generator, 1))´;
ExecQuery;
finally
Transaction.Commit;
end;



T+


Responder

Gostei + 0

29/10/2003

Maicon Loffi

Caro Amigo!

Para Funcionar a Inserção e de maneira mais prática eu uso da seguinte forma.

Coloque os componentes
IBDatabase
IBTransaction Ligado ao IBDatabase
Clique Duplo no Componente IBTransaction
Selecione a Opção ´Read Commited´, OK
Propriedades
DefaultAction = TACommitRetaining
AutoStopAction = saCommitRetaining
Coloque
IBQuery1 Ligado ao IBDatabase
IBUpdateSQL1 ligado a IBQuery1
Entre na propriedade SQL do IBQuery1
Selecione a Tabela, OK
Active = True;
(
Clique Duplo no IBQuery1 - Pressione Ctrl+F, Selecione todos os campos e arraste-os para o form - DbEdits para edição
ou
coloque um dbgrid.
)
Clique Duplo no IBUpdateSQL1
Clique em ´Select Primary Keys´
Clique em ´Generate SQL´, OK
No Evento OnDelete / OnPost do IBQuery1 Coloque o Seguinte
IBTransaction.Commitretaing;
Beleza, Sequindo estes passos sua tabela estará funcionando,
Não esqueça de ligar o dbnavigator a um datasource que é ligado ao IBQuery1

Valeu...
Maicon César Loffi


Responder

Gostei + 0

29/10/2003

Maicon Loffi

Amigo!
Esqueci de dizer que o IBQuery1 tem a propriedade GeneratorField,
onde se informa o Generator.

Valeu

Maicon César Loffi


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar