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
|
|
|
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
|
|
|
|
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.
|
|
|
|