ONDE ESTOU ERRANDO: PARAMETROS FIREBIRD VB6

ADRIANOM 24/02/2014 21:46:45
#435242
Estou tentando salvar utilizando parâmetros... (conforme, depois de muito quebrar a cabeça, vocês me ensinaram). Gostaria de saber onde está o erro... ele me acusa erro no [Ô].Execute[Ô]!

Segue o código:

  
[ô]Salva os dados
Dim cCmd As New ADODB.Command
If txtServico.Text = Empty Then
MsgBox [Ô]Favor registrar o tipo de serviço que será realizado.[Ô], vbInformation, [Ô]GWorks Softs[Ô]
Exit Sub
Else

If Func_Add = True Then

sSQL = [Ô][Ô]
sSQL = sSQL & [Ô]INSERT INTO OS ([Ô]
sSQL = sSQL & [Ô] PFIS,[Ô]
sSQL = sSQL & [Ô] PJUR,[Ô]
sSQL = sSQL & [Ô] CODIGO,[Ô]
sSQL = sSQL & [Ô] CLIENTE,[Ô]
sSQL = sSQL & [Ô] ENDERECO,[Ô]
sSQL = sSQL & [Ô] STATUS,[Ô]
sSQL = sSQL & [Ô] RESPONSAVEL,[Ô]
sSQL = sSQL & [Ô] SERVICO,[Ô]
sSQL = sSQL & [Ô] OBSERVACAO,[Ô]
sSQL = sSQL & [Ô] DTCADASTRO,[Ô]
sSQL = sSQL & [Ô] DTAGENDAMENTO,[Ô]
sSQL = sSQL & [Ô] DTENCERRAMENTO)[Ô]
sSQL = sSQL & [Ô] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)[Ô]

With cCmd

Set .ActiveConnection = CNN
.CommandType = adCmdText
.CommandText = sSQL
.Prepared = True

.Parameters(0) = IIf(optFisica.Value = True, 1, 0)
.Parameters(1) = IIf(optJuridica.Value = True, 1, 0)
.Parameters(2) = txtCodigo.Text
.Parameters(3) = IIf(cboNome.Text = [Ô][Ô], Null, cboNome.Text)
.Parameters(4) = IIf(txtEndereco.Text = [Ô][Ô], Null, txtEndereco.Text)
.Parameters(5) = IIf(cboStatus.Text = [Ô][Ô], Null, cboStatus.Text)
.Parameters(6) = IIf(cboResponsavel.Text = [Ô][Ô], Null, cboResponsavel.Text)
.Parameters(7) = IIf(txtServico.Text = [Ô][Ô], Null, txtServico.Text)
.Parameters(8) = IIf(txtObservacao.Text = [Ô][Ô], Null, txtObservacao.Text)
.Parameters(9) = IIf(txtAbertura.Text = [Ô][Ô], Null, VBA.Format(txtAbertura.Text, [Ô]yyyy/MM/dd[Ô]))
.Parameters(10) = IIf(txtAgendamento.Text = [Ô][Ô], Null, VBA.Format(txtAgendamento.Text, [Ô]yyyy/MM/dd[Ô]))
.Parameters(11) = IIf(txtConclusao.Text = [Ô][Ô], Null, VBA.Format(txtConclusao.Text, [Ô]yyyy/MM/dd[Ô]))

.Execute

End With


Set cCmd = Nothing


Leva-se em consideração que os campos txtServiço e txtObservação são Blob Text de 2000 caracteres pelo fato de serem passíveis de grandes entradas de dados.

Outra coisa: A partir daqui gostaria que analisassem a forma que uso para salvar a edição, está correto?

Segue:

  
If Func_Edit = True Then


[ô]Salva Edição

sSQL = [Ô][Ô]
sSQL = sSQL & [Ô]UPDATE OS SET PFIS = ?[Ô]
sSQL = sSQL & [Ô] PJUR = ?[Ô]
sSQL = sSQL & [Ô] CLIENTE = ?,[Ô]
sSQL = sSQL & [Ô] ENDERECO = ?,[Ô]
sSQL = sSQL & [Ô] STATUS = ?,[Ô]
sSQL = sSQL & [Ô] RESPONSAVEL = ?,[Ô]
sSQL = sSQL & [Ô] SERVICO = ?,[Ô]
sSQL = sSQL & [Ô] OBSERVACAO = ?,[Ô]
sSQL = sSQL & [Ô] DTCADASTRO = ?,[Ô]
sSQL = sSQL & [Ô] DTAGENDAMENTO = ?,[Ô]
sSQL = sSQL & [Ô] DTENCERRAMENTO = ?)[Ô]
sSQL = sSQL & [Ô] WHERE CODIGO = [Ô] & txtCodigo.Text

With cCmd

Set .ActiveConnection = CNN
.CommandType = adCmdText
.CommandText = sSQL
.Prepared = True

.Parameters.Append .CreateParameter([Ô]PFIS[Ô], adVarChar, adParamInput, 1)
.Parameters.Append .CreateParameter([Ô]PJUR[Ô], adVarChar, adParamInput, 1)
.Parameters.Append .CreateParameter([Ô]CLIENTE[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]ENDERECO[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]STATUS[Ô], adVarChar, adParamInput, 200)
.Parameters.Append .CreateParameter([Ô]RESPONSAVEL[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]SERVICO[Ô], adTypeText, adParamInput, 2000)
.Parameters.Append .CreateParameter([Ô]OBSERVACAO[Ô], adTypeText, adParamInput, 2000)
.Parameters.Append .CreateParameter([Ô]DTCADASTRO[Ô], adDate, adParamInput)
.Parameters.Append .CreateParameter([Ô]DTAGENDAMENTO[Ô], adDate, adParamInput)
.Parameters.Append .CreateParameter([Ô]DTENCERRAMENTO[Ô], adDate, adParamInput)


.Parameters([Ô]PFIS[Ô]) = IIf(optFisica.Value = True, 1, 0)
.Parameters([Ô]PJUR[Ô]) = IIf(optJuridica.Value = True, 1, 0)
.Parameters([Ô]CLIENTE[Ô]) = IIf(cboNome.Text = [Ô][Ô], Null, cboNome.Text)
.Parameters([Ô]ENDERECO[Ô]) = IIf(txtEndereco.Text = [Ô][Ô], Null, txtEndereco.Text)
.Parameters([Ô]STATUS[Ô]) = IIf(cboStatus.Text = [Ô][Ô], Null, cboStatus.Text)
.Parameters([Ô]RESPONSAVEL[Ô]) = IIf(cboResponsavel.Text = [Ô][Ô], Null, cboResponsavel.Text)
.Parameters([Ô]SERVICO[Ô]) = IIf(txtServico.Text = [Ô][Ô], Null, txtServico.Text)
.Parameters([Ô]OBSERVACAO[Ô]) = IIf(txtObservacao.Text = [Ô][Ô], Null, txtObservacao.Text)
.Parameters([Ô]DTCADASTRO[Ô]) = IIf(txtAbertura.Text = [Ô][Ô], Null, VBA.Format(txtAbertura.Text, [Ô]yyyy/MM/dd[Ô]))
.Parameters([Ô]DTAGENDAMENTO[Ô]) = IIf(txtAgendamento.Text = [Ô][Ô], Null, VBA.Format(txtAgendamento.Text, [Ô]yyyy/MM/dd[Ô]))
.Parameters([Ô]DTENCERRAMENTO[Ô]) = IIf(txtConclusao.Text = [Ô][Ô], Null, VBA.Format(txtConclusao.Text, [Ô]yyyy/MM/dd[Ô]))

.Execute

End With

Set cCmd = Nothing
End If
FILMAN 24/02/2014 22:43:42
#435247
ADRIANOM, qual o erro que esta aparecendo?
ADRIANOM 24/02/2014 22:58:30
#435250
FILMAN

Juro por tudo que é mais sagrado que estava dando erro..
estou usando o vmware para virtualizar xp com vb6...
foi só desligar e reiniciar, sem qlqr tipo de alteração no código e o negócio funcionou lisinho.. o que poderia ser???
FILMAN 24/02/2014 23:15:29
#435253
Resposta escolhida
você pode ter realizado alguma alteração no SGDB do firebird ou desinstalou o ODBC e instalou novamente sem reiniciar o S.O.

Ou realizou testes de instalações que corromperam alguns arquivos e ficaram reso em memória causando o erro e a reinicialização fez com que restabelecesse os arquivos de configuração do serviço.

é difícil dizer ao certo!
ADRIANOM 25/02/2014 16:08:49
#435293
minto.... erro voltou.... segue imagem com descrição....
FILMAN 25/02/2014 19:45:47
#435307
certo de fato é o campo BLOB você a subType como Text?

Eu particularmente não gosto do BLOB fica mais lento
ADRIANOM 27/02/2014 19:21:19
#435387
Exatamente...uso..

Agora, o que você me sugeriria?
FILMAN 28/02/2014 00:27:37
#435392
Sugiro que mude o campo para VARCHAR(4000)

ALTER TABLE OS ALTER COLUMN SERVICO TYPE VARCHAR(4000) CHARACTER SET WIN1252;
ALTER TABLE OS ALTER COLUMN OBSERVACAO TYPE VARCHAR(4000) CHARACTER SET WIN1252;


espero ter ajudado
ADRIANOM 02/03/2014 00:52:53
#435446
como assim.. queria usar um textbox multline... mas varchar(4000) captaria?
ADRIANOM 03/03/2014 22:38:59
#435488
Ainda sem resposta...
FILMAN 05/03/2014 20:12:35
#435562
sim você pode usar o MultiLine normalmente e ao gravar você conseguirá retornar os valores, e você pode também delimitar o tamanho colocando o maxlength = 4000
Tópico encerrado , respostas não são mais permitidas