View Full Version : duvida Web Developer 2008


silencept
11-06-2008, 17:40
Boas, neste momento apeteceu-me explorar o Web Developer 2008 da Microsoft.
Como ja acabei o meu super projecto em VB6, vou-me dedicando a isto..
mas surgiu este impasse...

gostaria que dessem uma vista de olhos..

tenho um form que tem cod_cliente(gerado automaticamente pela base de dados), morada, telefone,telemovel,código postal, data_registo e data de nascimento
tenho 2 botões, um novo, que limpa as textbox para escrever novos valores e um gravar para gravar os dados que eu inseri...

a questão agr é: ele não grava os dados na base de dados e eu não sei porque:

ele da erro aqui:

Erro de sintaxe na instrução INSERT INTO.
isto quando passa na instrução "comando.ExecuteNonQuery()"

aqui deixo o código


Imports System.Data.OleDb
Imports System.Data

PartialClass Default2
Inherits System.Web.UI.Page
Dim sql AsString
Dim conexao As OleDbConnection
Dim comando As OleDbCommand
ProtectedSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load
OnErrorResumeNext

txtnome.Enabled = False
txtmorada.Enabled = False
txtdescri.EnableViewState = False
txtloca.Enabled = False
txttelefone.Enabled = False
txttelemovel.Enabled = False
cmdcancelar.Enabled = False
cmdgravar.Enabled = False
txtdescri.Enabled = False
datanasc.Enabled = False
datareg.Enabled = False
EndSub
ProtectedSub Button1_Click(ByVal sender AsObject, ByVal e As System.EventArgs) Handles cmdnovo.Click
txtnome.Enabled = True
txtmorada.Enabled = True
txtdescri.EnableViewState = True
txtloca.Enabled = True
txttelefone.Enabled = True
txttelemovel.Enabled = True
txtdescri.Enabled = True
cmdeditar.Enabled = False
cmdeliminar.Enabled = False
cmdcancelar.Enabled = True
cmdgravar.Enabled = True
datanasc.Enabled = True
datareg.Enabled = True
txtnome.Focus()
EndSub
ProtectedSub cmdgravar_Click(ByVal sender AsObject, ByVal e As System.EventArgs) Handles cmdgravar.Click
OnErrorResumeNext
Dim x AsString
If cmdnovo.Enabled = TrueThen
x = MsgBox("Tem a Certeza que digitou os Dados Correctos?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "DecisÆo")
If x = vbYes Then
sql = "Insert into Clientes(nome,morada,telefone,telemovel,memo,data_ nasc,data_reg,cp"
sql &= " values ('" & txtnome.Text & "','" & txtmorada.Text & "','" & txttelemovel.Text & "','" & txttelefone.Text & "','" & txtdescri.Text & "','" & txtdatanasc.Text & "','" & txtdatareg.Text & "','" & txtloca.Text & "'"
conexao = New OleDbConnection("Provider = microsoft.jet.oledb.4.0;data source=c:\Sistema\bd.mdb")
If conexao.State > ConnectionState.Open Then conexao.Close()
conexao.Open()
comando = New OleDbCommand(sql, conexao)
comando.ExecuteNonQuery()
conexao.Close()
Else
ExitSub
EndIf
EndIf
EndSub
ProtectedSub datareg_SelectionChanged(ByVal sender AsObject, ByVal e As System.EventArgs) Handles datareg.SelectionChanged
txtdatareg.Text = datareg.SelectedDate
datareg.Enabled = True
datanasc.Enabled = True
EndSub
ProtectedSub datanasc_SelectionChanged(ByVal sender AsObject, ByVal e As System.EventArgs) Handles datanasc.SelectionChanged
txtdatanasc.Text = datanasc.SelectedDate
datanasc.Enabled = True
datareg.Enabled = True
EndSub
ProtectedSub seguinte_Click(ByVal sender AsObject, ByVal e As System.EventArgs) Handles seguinte.Click
EndSub
EndClass
Já agora, acrescentei 4 botões, um "Primeiro", "anterior","seguinte" e "Ultimo" e isto para fazer o mover o registo conforme prima o botão, como se cria esta rotina?que código devo usar?

Obrigado
(n se riam pk fiz isto td em apenas 1:30)

Riky
11-06-2008, 17:54
Eu não sou nenhum expert mas tu tens o IF que testa se a conexão está aberta, ora, se estiver aberta, fecha e abre outra vez a conexão, e dp executa o comando SQL.
Mas dp se por acaso a conexão estiver fechada, nem sequer a chegas a abrir pk sais do IF e do SUB.
Tens de ter uma opção para quando a conexão esta fechada.

Penso que seja isso.

silencept
11-06-2008, 18:19
não amigo, esta certo
se a conexão estiver aberta ele fecha e abre novamente com os dados que indico, se ele passar essa instrução é pk já se encontra fexado e é só perciso abrir...

mas onde ele da erro é na clausula comando.ExecuteNonQuery() que diz o seguinte erro:

Erro de sintaxe na instrução INSERT INTO.

Riky
11-06-2008, 18:51
Vê la se não te falta um ou dois ) no fim da instrução SQL.

sql = "Insert into Clientes(nome,morada,telefone,telemovel,memo,data_ nasc,data_reg,cp)"
sql &= " values ('" & txtnome.Text & "','" & txtmorada.Text & "','" & txttelemovel.Text & "','" & txttelefone.Text & "','" & txtdescri.Text & "','" & txtdatanasc.Text & "','" & txtdatareg.Text & "','" & txtloca.Text & "')"

silencept
11-06-2008, 19:04
continua sem dar...

mostro aqui o erro

http://img77.imageshack.us/img77/1209/erropw7.th.jpg (http://img77.imageshack.us/my.php?image=erropw7.jpg)

Riky
11-06-2008, 20:14
Assim a primeira vista não me parece mais nada mal, como disse não sou nenhum expert.
Tenta fazer debug e tentar perceber o que está dentro da string SQL e testa no SQL Management Studio para perceber o que está mal.

jpaulino
11-06-2008, 22:58
Provávelmente é a data que está num formato incorrecto. A melhor forma de não errares e não te preocupares com o formato da data (entre outras coisas) é usares parameters.

Podes ver este exemplo simples:
VB.NET: Gestão de Dados em SQL Server - Parte I (http://vbtuga.blogspot.com/2008/04/vbnet-gesto-de-dados-em-sql-server.html)


Está em SQL mas só tens de alterar o Sql... por OleDb...
Ex: SqlConnection fica em OleDbConnection

Jekkaman
11-06-2008, 23:03
Usa antes Sql em vez de oledb é mais facil e não causa tantos problemas.

Imports system.data.sql
Depois usas connection strings e por ai.

Guga123
12-06-2008, 06:14
Boas, neste momento apeteceu-me explorar o Web Developer 2008 da Microsoft.
Como ja acabei o meu super projecto em VB6, vou-me dedicando a isto..
mas surgiu este impasse...

gostaria que dessem uma vista de olhos..

tenho um form que tem cod_cliente(gerado automaticamente pela base de dados), morada, telefone,telemovel,código postal, data_registo e data de nascimento
tenho 2 botões, um novo, que limpa as textbox para escrever novos valores e um gravar para gravar os dados que eu inseri...

a questão agr é: ele não grava os dados na base de dados e eu não sei porque:

ele da erro aqui:

Erro de sintaxe na instrução INSERT INTO.
isto quando passa na instrução "comando.ExecuteNonQuery()"

aqui deixo o código



Já agora, acrescentei 4 botões, um "Primeiro", "anterior","seguinte" e "Ultimo" e isto para fazer o mover o registo conforme prima o botão, como se cria esta rotina?que código devo usar?

Obrigado
(n se riam pk fiz isto td em apenas 1:30)
Cara, estou com o mesmo erro que você. Já testei o comando sql no access pois estou fazendo o banco de dados nele e funcionou, adicionou registro na tabela mas da erro na intrução insert into qndo executa o cmd.ExecuteNonQuery()
Já debuguei pra tentar descobrir algo e nada.

Segue abaixo o código

PrivateSub Btn_salvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_salvar.Click
Dim constring AsString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\Arquivos\Gustavo\1- Faculdade\3º Periodo\Programação OO (Fábio)\01 - Projeto\SisCom 1.1\SisCom 1.1\SisCom.mdb;Persist Security Info=False"
Dim DBcon AsNew OleDb.OleDbConnection(constring)
DBcon.Open()
Dim stringsql AsString = "insert into clientes(nome, end, bairro, cidade, uf, cep, telefone, celular, email, notas) values('" & txt_nome.Text & "', '" & txt_end.Text & "', '" & txt_bairro.Text & "', '" & txt_cidade.Text & "', '" & Cmb_uf.Text & "', '" & Txt_cep.Text & "', '" & Txt_tel.Text & "', '" & Txt_cel.Text & "', '" & txt_email.Text & "', '" & txt_notas.Text & "')"
Dim cmd AsNew OleDb.OleDbCommand(stringsql, DBcon)
cmd.CommandType = CommandType.Text
cmd.ExecuteNonQuery()
DBcon.Close()
MessageBox.Show("Cliente" & txt_nome.Text & "gravado com sucesso!")
Beep()
Btn_salvar.Enabled = False
Btn_cancelar.Enabled = False
Btn_novo.Enabled = True
Btn_editar.Enabled = True
Btn_excluir.Enabled = True
txt_nome.Enabled = False
txt_bairro.Enabled = False
txt_cidade.Enabled = False
txt_email.Enabled = False
txt_notas.Enabled = False
txt_end.Enabled = False
Txt_cel.Enabled = False
Txt_tel.Enabled = False
Txt_cep.Enabled = False
Cmb_uf.Enabled = False
txt_nome.Text = ""
txt_end.Text = ""
txt_bairro.Text = ""
txt_cidade.Text = ""
Cmb_uf.Text = ""
Txt_cep.Text = ""
Txt_tel.Text = ""
Txt_cel.Text = ""
txt_email.Text = ""
txt_notas.Text = ""


Alguem ae pode nos ajudar?

Guga123
12-06-2008, 06:50
Logo depois de me cadastrar, e pedir ajuda aqui achei no site de suport da microsoft o erro do meu projeto.

O campo END que seria endereço é uma palavra reservada do Microsoft Jet 4.0 e isso estava fazendo a inclusão no banco nao funcionar, dps da alteração pra endereco funcinou corretamente.
No site dizia que esse erro ocorre com o access 2003.

Segue a baixo o link com as palavras reservadas em Jet 4.0:

http://support.microsoft.com/kb/248738/

Site do suporte microsoft onde encontrei o pq do erro:

http://support.microsoft.com/kb/892608/pt

jpaulino
12-06-2008, 09:22
Guga123,

Só agora vi o seu post mas por isso, e para evitar problemas com as palavras reservadas, devesse colocar os nomes dos campos com parênteses rectos. Ex:

SELECT [campo1], [campo2], [end], [password] FROM myTable

silencept
12-06-2008, 14:19
Obrigado...

ta resolvido, ja agora

eu no vb fazia "Cliente.movenext" para mover o registo, como movelast, moveprevious, move first...
como posso fazer isto no web developer?

da para utilizar o adodc no web developer?aquele controlo que tem no vb6...como?