USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  duvidas em ado
Futura
PORTO FERREIRA
SP - BRASIL
Postada em 31/01/2006 16:44 hs            
pessoal é o seguinte muito se fala em instruções sql ( insert,update,etc) qdo se usa ado, mas acabei de migrar um sistema, de dao para ado, é lógico que faltam alguns ajustes, mas reparei que com o uso do Rs( addnew, update), é mais dificil de gerar erros ao incluir/alterar no banco, qdo dois usuários tentam alterar o mesmo registro ao mesmo tempo, e na inclusão, com insert into, é mais fácil duplicar o código, mas vejam tudo isto sem tratamento de erros. Então estou passando duas rotinas diferentes de inclusão no banco, para que os amigos dêem uma analisada, e se possível alguma dica do que melhorar, ou se é isto mesmo.
ROTINA COM INSERT OU UPDATE sem campo autoincremeto:
If Trim(txtcodigo.Text) = Empty Then
   Dim Rs As ADODB.Recordset
   Set Rs = New ADODB.Recordset
   sql = "SELECT Max(codigo) AS codigo FROM usuarios"
   Rs.Open sql, Cnn, adOpenKeyset, adLockOptimistic
   If Rs.RecordCount > 0 Then
    txtcodigo = (Rs!codigo + 1)
   Else
    txtcodigo = 1
   End If
   wstipo = "U"
   sqlcmd = "insert into usuarios (codigo,nome,nomecompleto,senha,cor,tipo) values (" & txtcodigo.Text & ",'" & txtuser.Text & "','" & txtnome.Text & "','" & txtsenha.Text & "','" & cor & "','" & wstipo & "')"
   Rs.Close
   Set Rs = Nothing
  Else
   sqlcmd = " update usuarios set codigo =" & txtcodigo.Text & ",nome = '" & txtuser.Text & "',nomecompleto = '" & txtnome.Text & "',senha = '" & txtsenha.Text & "',cor = '" & cor & "'"
   sqlcmd = sqlcmd & " where [codigo] =" & txtcodigo.Text & ""
  End If
  Cnn.Execute (sqlcmd)
ROTINA COM RS.ADDNEW/RS.UPDATE com código autoincrmento:
Set Rs = New ADODB.Recordset
 Rs.CursorLocation = adUseServer
 If Trim(txtcodigo.Text) <> Empty Then
  sql = " select * from clientes where codigo = " & txtcodigo & " "
  Rs.Open sql, Cnn, adOpenKeyset, adLockPessimistic
 Else
  Rs.Open "clientes", Cnn, adOpenKeyset, adLockOptimistic
  Rs.AddNew
 End If
  Rs!classe = cmbclasse.Text
 Rs!cgc = txtcgc.Text
 Rs!ie = txtrg.Text
 Rs!razao = txtrazao.Text
 Rs!apelido = txtape.Text
 Rs!rua = txtrua.Text
 ......
 ......
 Rs.UPDATE
gostaria de opiniões dos colegas, pois nas consultas todos os RSs, são abertos como leitura, então não há problemas, mas uma vez que o sistema roda em uma rede de 10 usuários, tenho uma preocupação grande nas inserções/alterações, principalmente na tela de vendas que é bem pauleira, e não pode dar erros, pois hoje em DAO, é tranquilo.
     
Futura
PORTO FERREIRA
SP - BRASIL
Postada em 31/01/2006 21:06 hs            
ninguém ??
     
Futura
PORTO FERREIRA
SP - BRASIL
Postada em 02/02/2006 14:00 hs            
?
     
Ivo Barcelos
não registrado
Postada em 03/02/2006 09:42 hs   

Olá amigo.
1ª - vou comentar na parte da identação não sei se sua identação esta exatamenta assim ou se ao colar seu código aqui ficou desta maneita...
mas se seu codigo tiver identado exatamenta assim dá uma verifica pois codigos com uma identação inadequada será muito dificil dar manutenção posteriormente...

2ª - A maneira que esta passando os parametros pro INSERT esta perigoso amigo ex:
'Seu codigo
"insert into usuarios (codigo,nome,nomecompleto,senha,cor,tipo) values (" & txtcodigo.Text & ",'" & txtuser.Text & "','" & txtnome.Text & "','" & txtsenha.Text & "','" & cor & "','" & wstipo & "')"
se vc mesmo quiser gerar um erro neste codigo basta inserir um nome com o Apostrofo ex:
"insert into usuarios (codigo,nome,nomecompleto,senha,cor,tipo) values (1,'CARLOS','CARLOS DRUMM'OND DE ANDRADE','123','VERDE','SEI LA')"
esse apostrofo entre o drummond irá lhe causar erro pois ele vai interpretar como se fosse mais um parametro de um campo ou seja sua quantidade de campos à inserir será menor que a quantidade de parametros à inserir entendeu
para corrigir isto crie uma função para retirar os apostrofos ex:

private function TrataTexto(byval strParam as string) as string
    TrataTexto=chr(39) & replace(strParam,"'","") & chr(39)
end function
na instrução agora ficaria:

"insert into usuarios (codigo,nome,nomecompleto,senha,cor,tipo) values (" & txtcodigo.Text & ", & Tratatexto(txtuser.Text) & , & TrataTexto(txtnome.Text) & , & TrataTexto(txtsenha.Text) & ,& TrataTexto(cor) & , & TrataTexto(wstipo) & ")"


Qualquer coisa da um grito
Ivo

 
     
Sandro
não registrado
Postada em 03/02/2006 11:53 hs   
Olá,
 
Talvez você não saiba, mas você pode usar SQL com tabelas que tenham campos autoincremento, basta não declarar nem definir o valor do campo autoincremento:
 
sqlcmd = "insert into usuarios (nome,nomecompleto,senha,cor,tipo) values ('" & txtuser.Text & "','" & txtnome.Text & "','" & txtsenha.Text & "','" & cor & "','" & wstipo & "')"
Talvez isso resolva o seu problema.
 
um abraço,
Sandro.
     
Futura
PORTO FERREIRA
SP - BRASIL
Postada em 03/02/2006 13:46 hs            
Sandro, na verdade eu ja uso em algumas tabelas o autoincremento, o problema esta mesmo nas que não são autoincremento.
     
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2025   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página