ADO FIREBIRD

DINHORSO 23/01/2010 19:17:59
#332704
Quanto mais vou mexendo com ADO + Firebird mais me complico comecei a desenvolver um sistema simples de estoque, cujo encontra-se atrasado, pois to tendo serias dificuldades em trabalhar com ADO e o Banco de dados Firebird
Conexao:
Set BaseDados = New ADODB.Connection
BaseDados.CursorLocation = adUseClient
BaseDados.ConnectionString = ([Ô]DRIVER={Firebird/InterBase(r) driver};[Ô] & _
[Ô]user=SYSDBA; password=masterkey; DBNAME=[Ô] & App.Path & [Ô]\BASESAM.fdb;[Ô])
BaseDados.Open

tbServidor.CursorLocation = adUseClient
tbServidor.Open [Ô]Select * From tbServidor[Ô], BaseDados, 3, 4

1º Usando o metodo acima citado toda vez que abra um registro aparece espaços em branco e na base nao tem estes espaços.
2º Estou tentado abrir junto com o formulario os registros gravados mais da o erro Run time 3021
TECLA 23/01/2010 19:30:15
#332705
Como está GRAVANDO os dados? Poste a rotina.
Outra coisa, poste a DESCRIÇÃO DO ERRO, não o NÚMERO.
DINHORSO 23/01/2010 19:49:52
#332713
ROTINA

Sub GravarCadastro()
If txtNome.Text = Empty Then
MsgBox [Ô]Campo obrigatório vazio[Ô], vbInformation
txtNome.SetFocus
Exit Sub
End If

If txtMatricula.Text = Empty Then
MsgBox [Ô]Campo obrigatório vazio[Ô], vbInformation
txtMatricula.SetFocus
Exit Sub
End If

tbServidor!Nome = txtNome.Text
tbServidor!CPF = txtCPF.Text
tbServidor!RG = txtRG.Text
tbServidor!Matricula = txtMatricula.Text
tbServidor!Cargo = txtCargo.Text
tbServidor!Coordenadoria = txtCoordenadoria.Text
tbServidor.UpdateBatch ========================> Ja tentei tambem tbServidor.Update
cmdBotaos.Item(3).Caption = [Ô]&Fechar[Ô]
fraServidor.Enabled = False
cmdBotaos.Item(0).Enabled = True
cmdBotaos.Item(1).Enabled = False
cmdBotaos.Item(2).Enabled = False
cmdBotaos.Item(4).Enabled = False
cmdBotaos.Item(5).Enabled = True
End Sub

ROTINA

Sub AbrirCadastro()
tbServidor.MoveFirst
txtNome.Text = tbServidor!Nome
txtCPF.Text = tbServidor!CPF
txtRG.Text = tbServidor!RG
txtMatricula = tbServidor!Matricula
txtCargo.Text = tbServidor!Cargo
txtCoordenadoria.Text = tbServidor!Coordenadoria
End Sub

Segue o error
EDERMIR 23/01/2010 23:37:59
#332719
Resposta escolhida
Para ocorrer este erro significa que você não está com o registro selecionado.

Faça o camonado por SQL:

UPDATE TABELA set CAMPO1=VALOR1,CAMPO2=VALOR2 where CAMPO_CHAVE = VALOR_CHAVE

Lembre-se que os valores caracter devem estar entre ASPAS SIMPLES e os valores DATA entre ASPAS SIMPLES e com a formatação [Ô]yyyy-mm-dd[Ô].
DINHORSO 24/01/2010 10:11:42
#332725
Sim a questao que usando a Rotina AbrirCadastro os dados nao estao sendo visualizados aparece a mensagem da tela em anexa.
TECLA 24/01/2010 14:17:06
#332741
O erro ocorre pois não há registros na TABELA.
Experimente utilizar um FRONT-END do FIREBIRD (IBExpert, IBConsole...) para visualizar se há registros.

Citação:

:
Para ocorrer este erro significa que você não está com o registro selecionado.

Faça o camonado por SQL:

UPDATE TABELA set CAMPO1=VALOR1,CAMPO2=VALOR2 where CAMPO_CHAVE = VALOR_CHAVE

Lembre-se que os valores caracter devem estar entre ASPAS SIMPLES e os valores DATA entre ASPAS SIMPLES e com a formatação [Ô]yyyy-mm-dd[Ô].



Já tentou a dica acima para UPDATE?

Para INCLUIR...
con.Execute [Ô]INSERT INTO tabela (campo1, campo2) VALUES ([ô]valor1[ô], [ô]valor2[ô])[Ô]
ICEMAN 24/01/2010 15:33:49
#332748
Citação:

1º Usando o metodo acima citado toda vez que abra um registro aparece espaços em branco e na base nao tem estes espaços.



Se vc usar o campo como char e nao preencher todos os caracteres que vc colocou lá no limite o driver obdc preenche com espaços

use o varchar que o mesmo nao ficará com os espaços

Citação:

2º Estou tentado abrir junto com o formulario os registros gravados mais da o erro Run time 3021



Esse erro posivelmente vc esta tentando carregar um registro e o recordset esta vazio

analize bem sua rotina e verifique se vc nao esta fechando o recordset ou se o registro procurado é inexistente, as vezes o registro nao retorna se vc nao aplicar o filtro correto na instrução sql
EDERMIR 24/01/2010 18:55:32
#332757
Baseado em todas as respostas dadas por você e pelos colegas, recomendo que você ABRA A TABELA quando precisar usa-la. Se a tabela está vazia (EOF=TRUE no momento em que o SELECT é executado) controle o erro e não alimente a exibição.

Ao inserir o dado, utilize o INSERT como descrito pelo TECLA pois havendo um campo NOT NULL você poderá [Ô]forçar[Ô] o valor além de GARANTIR que não está ALTERANDO um valor existente.

Ao alterar, dê preferência pelo UPDATE pois pode controlar QUAL registro será alterado (na cláusula WHERE).

Ao selecionar um registro, utilize o comando SELECT pois o resultado será filtrado na cláusula WHERE facilitando seu tratamento.

Qual é o comando que você executa para abris a tabela?
Tópico encerrado , respostas não são mais permitidas