BOTAO INSERIR - HELP
Boa noite Pessoal...
ZEROCAL, estou anexando o meu projeto + banco de dados.
Apenas recaptulando:
- Estou usando Visual Basic 2008 + Firebird.
- Meu projeto roda e exibe em 3 textbox o codigo, o nome e o endereço que estao no banco de dados.
- Quando o projeto esta rodando, eu consigo alterar o conteudo dos textbox e ao clicar no botao, os dados sao alterados no banco de dados.
- O que eu qro é que o projeto rode, e que ao preencher os 3 textbox o projeto cadastre um novo [Ô]cliente[Ô], codigo, nome e endereço.
Obrigado pela atenção pessoal!
ZEROCAL, estou anexando o meu projeto + banco de dados.
Apenas recaptulando:
- Estou usando Visual Basic 2008 + Firebird.
- Meu projeto roda e exibe em 3 textbox o codigo, o nome e o endereço que estao no banco de dados.
- Quando o projeto esta rodando, eu consigo alterar o conteudo dos textbox e ao clicar no botao, os dados sao alterados no banco de dados.
- O que eu qro é que o projeto rode, e que ao preencher os 3 textbox o projeto cadastre um novo [Ô]cliente[Ô], codigo, nome e endereço.
Obrigado pela atenção pessoal!
As gravações via iDataAdapter não são muito aconselháveis, pois vão processar todos os registros, ao menos para validadar o Status (modified, inserted etc). Assim, demoram mais tempo e requerem a carga das estruturas (da.FillSchema) e a definição do método de Update. O uso dos iCommand é mais seguro, de fato.
Não và o projeto, mas o ALTAIR148 passou basicamente o que devia. Só [Ô]comeu[Ô] um pedacinho.
Em todos os casos, verifique também se a tabela de fato contém um PrimaryKey exclusivo. Sempre que eu vejo uma instrução SQL onde o código que identifica o registro é [Ô]lançado manualmente[Ô], passa um calafrio pela espinha, pois nesses casos, a garantia da exclusividade deixa de ser do mecanismo de dados, e, como se dizia há alguns anos atrás, passa á ser [Ô]la garantia soy yo[Ô]...
A melhor opção para as PrimaryKey, independente do banco de dados, são campos de auto-geração, pois garantem que um lapso do usuário ou do aplicativo não vão gerar um valor inaceitável para uma PrimaryKey, como [Ô]0[Ô] ou [Ô]-[Ô] (o sinal de menos também é numerico, afinal de contas...).
MAS, contudo, porém, todavia, como se sabe, o Firebird não sabe o que é IDENTITY, você diz isso á ele e ele retruca: [Ô]é de comer ou de beber?[Ô]. E ele não é vilão sozinho: O Oracle, até há alguns anos atrás, não fazia questão disso e só começou á apresentar scripts de modelo para gerar seus [Ô]proto-autonumeradores[Ô] (são a mesma coisa que estaremos fazendo mais adiante) há poucos anos, após a .Net virar moda.
Assim, sempre há uma saÃda. Se for de seu interesse, é claro.
Você sempre poderá [Ô]simular[Ô] um IDENTITY (ou AUTOINCREASEFIELD, ô nome pomposo...) como nos passos do exemplo abaixo:
A - Criação da tabela:
B - Criar a entidade [Ô]auto-numerador[Ô] (o primeiro valor da seqüencia será 1):
C - Vincular o [Ô]auto-numerador[Ô] á tabela por meio de gatilho (o incremento da seqüência será de 1 em 1):
Depois desses três passos, não é mais necessário (e aliás, é incorreto), informar o campo ID nas inclusões da tabela tabelaExemplo. Uma instrução tÃpica passa á ser: [Ô]INSERT INTO tabelaExemplo (NOME) VALUES (@NOME)[Ô]
E se sua base precisar comportar alguns milhões de registros, não se intimide: Troque o INTEGER (inteiro de 32 bits) por BIGINT (inteiro de 64 bits). O gatilho vai continuar processando o que deve, como deve, na hora que deve.
Não và o projeto, mas o ALTAIR148 passou basicamente o que devia. Só [Ô]comeu[Ô] um pedacinho.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
con = New FbConnection([Ô]Server=localhost;User=SYSDBA;Passwor d=masterkey;Database=C: este\bd.gdb[Ô])
Dim command As New FbCommand([Ô]nsert into cliente (codigo, nome, endereco)values(@codigo, @nome, @endereco)[Ô], con)
command.Parameters.AddWithValue([Ô]@codigo[Ô], CInt(Texcodigo.Text))
command.Parameters.AddWithValue([Ô]@nome[Ô], Texnome.Text)
command.Parameters.AddWithValue([Ô]@endereco[Ô], Texendereco.Text)
con.Open
command.ExecuteNonQuery()
command.Dispose()
con.Close
End Sub
Em todos os casos, verifique também se a tabela de fato contém um PrimaryKey exclusivo. Sempre que eu vejo uma instrução SQL onde o código que identifica o registro é [Ô]lançado manualmente[Ô], passa um calafrio pela espinha, pois nesses casos, a garantia da exclusividade deixa de ser do mecanismo de dados, e, como se dizia há alguns anos atrás, passa á ser [Ô]la garantia soy yo[Ô]...
A melhor opção para as PrimaryKey, independente do banco de dados, são campos de auto-geração, pois garantem que um lapso do usuário ou do aplicativo não vão gerar um valor inaceitável para uma PrimaryKey, como [Ô]0[Ô] ou [Ô]-[Ô] (o sinal de menos também é numerico, afinal de contas...).
MAS, contudo, porém, todavia, como se sabe, o Firebird não sabe o que é IDENTITY, você diz isso á ele e ele retruca: [Ô]é de comer ou de beber?[Ô]. E ele não é vilão sozinho: O Oracle, até há alguns anos atrás, não fazia questão disso e só começou á apresentar scripts de modelo para gerar seus [Ô]proto-autonumeradores[Ô] (são a mesma coisa que estaremos fazendo mais adiante) há poucos anos, após a .Net virar moda.
Assim, sempre há uma saÃda. Se for de seu interesse, é claro.
Você sempre poderá [Ô]simular[Ô] um IDENTITY (ou AUTOINCREASEFIELD, ô nome pomposo...) como nos passos do exemplo abaixo:
A - Criação da tabela:
CREATE TABLE TabelaExemplo (
ID INTEGER NOT NULL,
NOME VARCHAR(50)
);
ALTER TABLE TabelaExemplo ADD CONSTRAINT pk_tbExemplo PRIMARY KEY (ID);
B - Criar a entidade [Ô]auto-numerador[Ô] (o primeiro valor da seqüencia será 1):
CREATE GENERATOR gr_TabelaExemplo;
SET GENERATOR gr_TabelaExemplo TO 1;
C - Vincular o [Ô]auto-numerador[Ô] á tabela por meio de gatilho (o incremento da seqüência será de 1 em 1):
CREATE TRIGGER tbExemploAutoId_BI0 FOR tabelaExeplo
ACTIVE BEFORE INSERT POSITION 0
AS
begin
IF(NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(gr_TabelaExemplo, 1);
end
Depois desses três passos, não é mais necessário (e aliás, é incorreto), informar o campo ID nas inclusões da tabela tabelaExemplo. Uma instrução tÃpica passa á ser: [Ô]INSERT INTO tabelaExemplo (NOME) VALUES (@NOME)[Ô]
E se sua base precisar comportar alguns milhões de registros, não se intimide: Troque o INTEGER (inteiro de 32 bits) por BIGINT (inteiro de 64 bits). O gatilho vai continuar processando o que deve, como deve, na hora que deve.
Olá pessoal, estive fora por alguns dias mas já estou de volta!
Obrigado pela atenção de todos mas ainda estou com o mesmo problema, continuo sem conseguir cadastrar no banco de dados.
Sou iniciante, e não consigo fazer funcionar!
Se alguém tiver um exemplo pratico, porem fácil de apenas um cadastro entre Visual Basic 2008 e Firebird eu agradeceria!!!
Obrigado pela atenção de todos mas ainda estou com o mesmo problema, continuo sem conseguir cadastrar no banco de dados.
Sou iniciante, e não consigo fazer funcionar!
Se alguém tiver um exemplo pratico, porem fácil de apenas um cadastro entre Visual Basic 2008 e Firebird eu agradeceria!!!
Olá Amigo
Fiz um exemplo correndo aki, mas está ai.
Dentro da pasta tem o driver para comunicação com o firebird.
Abraços
Fiz um exemplo correndo aki, mas está ai.
Dentro da pasta tem o driver para comunicação com o firebird.
Abraços
Obrigado GUIMORAES123 com sua ajuda aprendi a cadastrar!
Tópico encerrado , respostas não são mais permitidas