VALIDACAO DATA FIREBIRD
Caro OMAR2011 eu não tenho problemas em minhas aplicações com o FireBird devido o uso de parâmetros, mas obrigado por se preocupar em nos mostrar como se deve utilizar.
ADRIANOM de foto como citado em um outro tópico a utilização de parâmetros faz com que a aplicação tenha uma consistência melhor na questão de gravação no DB.
Mas realizei testes aqui e descobri o que foi o problema!
faça os testes assim
a expressão NULL não pode ser passar como [ô]Null[ô] e sim somnete Null sem aspas simples
espero ter ajudado
ADRIANOM de foto como citado em um outro tópico a utilização de parâmetros faz com que a aplicação tenha uma consistência melhor na questão de gravação no DB.
Mas realizei testes aqui e descobri o que foi o problema!
faça os testes assim
sSQL = sSQL & IIf(IsDate(txtAdmissao.Text) = False, [Ô]Null[Ô], [Ô][ô][Ô] & Format(txtAdmissao.Text, [Ô]yyyy/MM/dd[Ô]) & [Ô][ô][Ô]) & [Ô],[Ô]
a expressão NULL não pode ser passar como [ô]Null[ô] e sim somnete Null sem aspas simples
espero ter ajudado
OMAR2011
veja o meu código, conforme seu exemplo:
No .CommandType = adCmdText gera um erro, como se não houvesse referência dele no meu projeto.
Verifiquei que você utiliza o Microsoft ActiveX Data Objects 2.8 Library.... eu utilizava o 2.7, e alterei, realizando a referência da versão que veio junto ao seu projeto. Porém o .CommandType = adCmdText gera o erro.. o que pode ser???
veja o meu código, conforme seu exemplo:
[ô]Adicionando contato
Dim adcmdFuncionario As New ADODB.Recordset
With adcmdFuncionario
Set .ActiveConnection = CNN
.CommandType = adCmdText
.Prepared = True
.CommandText = [Ô]INSERT INTO FUNCIONARIOS (Codigo,Nome,Endereco,Numero,Bairro,Cidade,Telefone,Celular,Admissao,Demissao,Ativo,Observacao) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)[Ô]
.Parameters.Append .CreateParameter([Ô]Codigo[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Nome[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Endereco[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Numero[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Bairro[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Cidade[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Telefone[Ô], adVarChar, adParamInput, 100)
.Parameters.Append .CreateParameter([Ô]Celular[Ô], adVarChar, adParamInput, 100)
.Parameters.Append .CreateParameter([Ô]Admissao[Ô], adDate, adParamInput)
.Parameters.Append .CreateParameter([Ô]Demissao[Ô], adDate, adParamInput)
.Parameters.Append .CreateParameter([Ô]Ativo[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Observacao[Ô], adBlob, adParamInput)
.Parameters([Ô]Codigo[Ô]) = txtCodigo.Text
.Parameters([Ô]Nome[Ô]) = txtNome.Text
.Parameters([Ô]Endereco[Ô]) = cboEndereco.Text
.Parameters([Ô]Numero[Ô]) = txtNumero.Text
.Parameters([Ô]Bairro[Ô]) = cboBairro.Text
.Parameters([Ô]Cidade[Ô]) = cboCidade.Text
.Parameters([Ô]Telefone[Ô]) = IIf(txtTel.Text = [Ô][Ô], Empty, txtTel.Text)
.Parameter([Ô]Celular[Ô]) = IIf(txtCel.Text = [Ô][Ô], Empty, txtCel.Text)
.Parameter([Ô]Admissao[Ô]) = IIf(txtAdmissao.Text = [Ô][Ô], Empty, VBA.Format(txtAdmissao.Text, [Ô]yyyy/mm/dd[Ô]))
.Parameter([Ô]Demissao[Ô]) = IIf(txtDemissao.Text = [Ô][Ô], Empty, VBA.Format(txtDemissao.Text, [Ô]yyyy/mm/dd[Ô]))
.Parameter([Ô]Ativo[Ô]) = IIf(chkFuncionario.Value = vbChecked, 1, 0)
.Parameters([Ô]Observacao[Ô]) = txtObservacao.Text
.Execute
End With
[ô]Libera o Recordset
Set adcmdFuncionario = Nothing
No .CommandType = adCmdText gera um erro, como se não houvesse referência dele no meu projeto.
Verifiquei que você utiliza o Microsoft ActiveX Data Objects 2.8 Library.... eu utilizava o 2.7, e alterei, realizando a referência da versão que veio junto ao seu projeto. Porém o .CommandType = adCmdText gera o erro.. o que pode ser???
GRAAAAANNNNNNNNDDDDDDEEEEEEEEEE FILMAN
Deu certo...
OBRIGADO...
Pontos para você e para o OMAR2011....
Vou encerrar o tópico qndo receber retorno do OMAR2011 com a dúvida sobre o erro que aconteceu nos parâmetros e com a função de editar, também, em parâmetros... Interessei pelo danado dos parâmetros.. se você souber colabore - ainda mais...rs. - com este tópico: há muita gente com esta dúvida... e está acompanhando este tópico!
Deu certo...
OBRIGADO...
Pontos para você e para o OMAR2011....
Vou encerrar o tópico qndo receber retorno do OMAR2011 com a dúvida sobre o erro que aconteceu nos parâmetros e com a função de editar, também, em parâmetros... Interessei pelo danado dos parâmetros.. se você souber colabore - ainda mais...rs. - com este tópico: há muita gente com esta dúvida... e está acompanhando este tópico!
Caro ADRIANOM não precisa dessa parte do código
.Parameters.Append .CreateParameter([Ô]Codigo[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Nome[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Endereco[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Numero[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Bairro[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Cidade[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Telefone[Ô], adVarChar, adParamInput, 100)
.Parameters.Append .CreateParameter([Ô]Celular[Ô], adVarChar, adParamInput, 100)
.Parameters.Append .CreateParameter([Ô]Admissao[Ô], adDate, adParamInput)
.Parameters.Append .CreateParameter([Ô]Demissao[Ô], adDate, adParamInput)
.Parameters.Append .CreateParameter([Ô]Ativo[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Observacao[Ô], adBlob, adParamInput)
faça sem que vai dar certo os parâmetros!
.Parameters.Append .CreateParameter([Ô]Codigo[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Nome[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Endereco[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Numero[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Bairro[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Cidade[Ô], adVarChar, adParamInput, 500)
.Parameters.Append .CreateParameter([Ô]Telefone[Ô], adVarChar, adParamInput, 100)
.Parameters.Append .CreateParameter([Ô]Celular[Ô], adVarChar, adParamInput, 100)
.Parameters.Append .CreateParameter([Ô]Admissao[Ô], adDate, adParamInput)
.Parameters.Append .CreateParameter([Ô]Demissao[Ô], adDate, adParamInput)
.Parameters.Append .CreateParameter([Ô]Ativo[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Observacao[Ô], adBlob, adParamInput)
faça sem que vai dar certo os parâmetros!
[txt-color=#e80000]Dim adcmdFuncionario As New ADODB.Recordset[/txt-color], errado.
Dim adcmdFuncionario As New ADODB.Command
.[txt-color=#e80000]Parameter([Ô]Celular[Ô]) = IIf(txtCel.Text = [Ô][Ô], Empty, txtCel.Text)[/txt-color],errado
.Parameters([Ô]Celular[Ô]) = IIf(txtCel.Text = [Ô][Ô], Empty, txtCel.Text)
.Parameters([Ô]Admissao[Ô]) = IIf(txtAdmissao.Text = [Ô][Ô], Empty, VBA.Format(txtAdmissao.Text, [Ô]yyyy/mm/dd[Ô]))
.Parameters([Ô]Demissao[Ô]) = IIf(txtDemissao.Text = [Ô][Ô], Empty, VBA.Format(txtDemissao.Text, [Ô]yyyy/mm/dd[Ô]))
Dim adcmdFuncionario As New ADODB.Command
.[txt-color=#e80000]Parameter([Ô]Celular[Ô]) = IIf(txtCel.Text = [Ô][Ô], Empty, txtCel.Text)[/txt-color],errado
.Parameters([Ô]Celular[Ô]) = IIf(txtCel.Text = [Ô][Ô], Empty, txtCel.Text)
.Parameters([Ô]Admissao[Ô]) = IIf(txtAdmissao.Text = [Ô][Ô], Empty, VBA.Format(txtAdmissao.Text, [Ô]yyyy/mm/dd[Ô]))
.Parameters([Ô]Demissao[Ô]) = IIf(txtDemissao.Text = [Ô][Ô], Empty, VBA.Format(txtDemissao.Text, [Ô]yyyy/mm/dd[Ô]))
FILMAN... OK... Mas não entendi então.. como ficaria?
OMAR2011... Como ficaria o comando para update?
OMAR2011... Como ficaria o comando para update?
Ai vai.
Private Sub Command5_Click()
Dim adCmdPaciente As New ADODB.Command
Dim CodCliente As Long
Dim Resp As Byte
With adCmdPaciente
Set .ActiveConnection = Db
.CommandType = adCmdText
.Prepared = True
.CommandText = [Ô]Update Cliente set Nomecli=?,Admissao=? Where IdCli=[Ô] & Text1.Text
.Parameters.Append .CreateParameter([Ô]Nomecli[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]Admissao[Ô], adDate, adParamInput)
.Parameters([Ô]Nomecli[Ô]) = Text2.Text
.Parameters([Ô]Admissao[Ô]) = IIf(Text4.Text = [Ô][Ô], Empty, Format(Text4.Text, [Ô]yyyy/mm/dd[Ô]))
[ô].Parameters([Ô]Admissao[Ô]) = Text4.Text
.Execute
[ô]If Err.Number <> 0 Then
[ô]MostraErro
End With
Set adCmdPaciente = Nothing
[ô]cmdNovo_Click
End Sub
Private Sub Command5_Click()
Dim adCmdPaciente As New ADODB.Command
Dim CodCliente As Long
Dim Resp As Byte
With adCmdPaciente
Set .ActiveConnection = Db
.CommandType = adCmdText
.Prepared = True
.CommandText = [Ô]Update Cliente set Nomecli=?,Admissao=? Where IdCli=[Ô] & Text1.Text
.Parameters.Append .CreateParameter([Ô]Nomecli[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]Admissao[Ô], adDate, adParamInput)
.Parameters([Ô]Nomecli[Ô]) = Text2.Text
.Parameters([Ô]Admissao[Ô]) = IIf(Text4.Text = [Ô][Ô], Empty, Format(Text4.Text, [Ô]yyyy/mm/dd[Ô]))
[ô].Parameters([Ô]Admissao[Ô]) = Text4.Text
.Execute
[ô]If Err.Number <> 0 Then
[ô]MostraErro
End With
Set adCmdPaciente = Nothing
[ô]cmdNovo_Click
End Sub
Ficaria basicamente assim
Dim cCmd As New ADODB.Command
With cCmd
Set .ActiveConnection = cConn
.CommandType = adCmdText
.Prepared = True
vSQL = [Ô][Ô]
vSQL = vSQL & [Ô]INSERT INTO FUNCIONARIOS ([Ô]
vSQL = vSQL & [Ô] Codigo,[Ô]
vSQL = vSQL & [Ô] Nome,[Ô]
vSQL = vSQL & [Ô] Endereco,[Ô]
vSQL = vSQL & [Ô] Numero,[Ô]
vSQL = vSQL & [Ô] Bairro,[Ô]
vSQL = vSQL & [Ô] Cidade,[Ô]
vSQL = vSQL & [Ô] Telefone,[Ô]
vSQL = vSQL & [Ô] Celular,[Ô]
vSQL = vSQL & [Ô] Admissao,[Ô]
vSQL = vSQL & [Ô] Demissao,[Ô]
vSQL = vSQL & [Ô] Ativo,[Ô]
vSQL = vSQL & [Ô] Observacao[Ô]
vSQL = vSQL & [Ô] ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)[Ô]
.Parameters(0) = txtCodigo.Text
.Parameters(1) = txtNome.Text
.Parameters(2) = cboEndereco.Text
.Parameters(3) = txtNumero.Text
.Parameters(4) = cboBairro.Text
.Parameters(5) = cboCidade.Text
.Parameters(6) = IIf(txtTel.Text = [Ô][Ô], Empty, txtTel.Text)
.Parameter(7) = IIf(txtCel.Text = [Ô][Ô], Empty, txtCel.Text)
.Parameter(8) = IIf(IsDate(txtAdmissao.Text) = False, [Ô]Null[Ô], CDate(txtAdmissao.Text))
.Parameter(9) = IIf(IsDate(txtDemissao.Text) = False, [Ô]Null[Ô], CDate(txtDemissao.Text))
.Parameter(10) = IIf(chkFuncionario.Value = vbChecked, 1, 0)
.Parameters(11) = txtObservacao.Text
.Execute
End With
Set cCmd = Nothing
E qual dos dois modelos me aconselham... .o antigo que o Filman conseguiu sanar o problema ou este em parâmetros?
Cara eu aconselho o parâmetro, porém como o seu sistema já esta escrito muitas linhas de código daria muito trabalho para refazer, portanto não ha problema algum se você continuar da maneira com que estava fazendo!
Mas se tiver a oportunidade de mudar para parâmetros é aconselhável.
Em meu sistema utilizo parâmetros e SQL injection os dois funcionam muito bem depende de como quer prosseguir!
Mas se tiver a oportunidade de mudar para parâmetros é aconselhável.
Em meu sistema utilizo parâmetros e SQL injection os dois funcionam muito bem depende de como quer prosseguir!
Tópico encerrado , respostas não são mais permitidas