williamjda Posted November 18, 2016 at 05:28 PM Report #600680 Posted November 18, 2016 at 05:28 PM (edited) Amigos, boa tarde. Bom tenho uma aplicação que cria documentos. Como se fosse um word. Estes documentos são visualizados em um crystalreport. Com isso os mesmo mantem toda a formatação de texto. E no crystalReport ele visualiza documentos do tipo RTF. Para gravar o documento funciona normalmente. Porem não consigo alterar o documento. Segue abaixo o update que estou a utilizar. 'FECHA A CONEXÃO COM O BANCO ConectionBD.Close() Try 'CHECA A CONECTION STRING PARA GRAVAR OS DADOS NO BANCO DE DADOS Dim cmd As SqlCommand = ConectionBD.CreateCommand 'QUERY PARA GRAVAR NO BANCO DE DADOS Using com As New SqlCommand("UPDATE Cadastro_Modelo_Documento SET (nomedocumento, descricao, empresa, dataregistro, login) values (@nomedocumento, @descricao, @empresa, @dataregistro, @login)", ConectionBD) com.Parameters.AddWithValue("@nomedocumento", Cadastro_Modelo_Documento_Editor.NomeDocumento) com.Parameters.AddWithValue("@descricao", Cadastro_Modelo_Documento_Editor.txtdescricao.Rtf) com.Parameters.AddWithValue("@empresa", System.txtempresa.Text) com.Parameters.AddWithValue("@dataregistro", Now.Date) com.Parameters.AddWithValue("@login", System.txtlogin.Text) ConectionBD.Open() com.ExecuteNonQuery() 'FECHA A CONEXÃO COM O BANCO DE DADOS ConectionBD.Close() 'RETORNA O MENSAGE DE OK APOS GRAVAR NO BANCO MsgBox("Registro alterado com sucesso.", MsgBoxStyle.Information, "ATENÇÃO !!!") End Using Catch ex As Exception 'RETORNA A MENSAGE DE ERRO CASO O COMANDO NÃO CONSIGA GRAVAR NO BANCO MsgBox(ex.Message, MsgBoxStyle.Exclamation, "UPDATE_Modelo_Documento_Alterar") 'FECHA A CONEXÃO COM O BANCO ConectionBD.Close() End Try O erro que ocorre é este: Incorrect Sintaxe near '('. Sei que a mensagem é bem clara ao dizer que tem uma sintase incorreta ou um erro na query. Mas já tentei de tudo. Se eu retirar tudo que for do padrão RTF ai funciona. Alguém poderia me ajudar. Grato. Att; William Edited March 21, 2017 at 03:26 PM by williamjda Erro no texto
williamjda Posted November 18, 2016 at 05:42 PM Author Report #600681 Posted November 18, 2016 at 05:42 PM Pelo que eu entendi o erro ocorre por conta das palavras com acentuação.
williamjda Posted November 18, 2016 at 05:50 PM Author Report #600682 Posted November 18, 2016 at 05:50 PM É isso mesmo. Verifiquei e quando eu removo as palavras com acentuação ele grava. Mas quando tem acentuação não. Também troquei o UPDATE. Dim cmd As SqlCommand = ConectionBD.CreateCommand cmd.CommandText = ("UPDATE Cadastro_Modelo_Documento SET " _ & "descricao = '" & Cadastro_Modelo_Documento_Editor.txtdescricao.Rtf & "'," _ & "empresa = '" & System.txtempresa.Text & "'," _ & "dataregistro = '" & Mid(Date.Now, 7, 4) & "/" & Mid(Date.Now, 4, 2) & "/" & Mid(Date.Now, 1, 2) & "'," _ & "login = '" & System.txtlogin.Text & "'" _ & " WHERE iddocumento = '" & Cadastro_Modelo_Documento.DataGrid_Dados.CurrentRow.Cells(0).Value & "'") 'ABRE A CONEXÃO COM O BANCO ConectionBD.Open() 'EXECUTA O COMANDO DO UPDATE cmd.ExecuteNonQuery() 'FECHA A CONEXÃO COM O BANCO ConectionBD.Close() Bom agora só não entendo porque ele não permite alterar a com acentuação mas permite gravar com acentuação.
williamjda Posted November 28, 2016 at 01:01 PM Author Report #600915 Posted November 28, 2016 at 01:01 PM Pessoal alguém tem alguma sugestão para isso?
M6 Posted November 28, 2016 at 02:18 PM Report #600920 Posted November 28, 2016 at 02:18 PM O comando de UPDATE está errado. O erro que te está a dar é bastante claro e se fores ver a documentação do comando UPDATE vais perceber isso. Vê aqui como se usa o comando UPDATE: http://www.w3schools.com/sql/sql_update.asp 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
williamjda Posted November 29, 2016 at 03:25 PM Author Report #600936 Posted November 29, 2016 at 03:25 PM Olá amigo. M6. Bom não estou a ver onde está o erro no UPDATE que enviei. Poderia me mostrar onde você vê o erro. E pelos testes que fiz não há um erro na query, mas ocorre um erro quando o campo descrição contem palavras com acentuação. Pois este campo tem propriedades RTF. No crystalReport. Como disse o insert funciona mas o UPDATE não. Pois este é o UPDATE para o SQL que mencionei acima. Os 2 são a mesma coisa: UPDATE Cadastro_Modelo_Documento SET descricao = 'Descrição do texto', empresa = '1', dataregistro = '2016/11/29', login = 'nomelogin' WHERE iddocumento = '2' Atenciosamente; William
M6 Posted November 29, 2016 at 04:31 PM Report #600937 Posted November 29, 2016 at 04:31 PM (edited) Ah, desculpa, não tinha visto que tinhas uma versão nova. Creio o teu problema são os acentos, verifica o encoding definido para a tabela/campo (depende da base de dados que estiveres a usar). PS: qual é a mensagem de erro que dá? Edited November 29, 2016 at 04:32 PM by M6 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
williamjda Posted November 30, 2016 at 12:49 PM Author Report #600954 Posted November 30, 2016 at 12:49 PM Gravei no banco de dados a palavra animação. Conforme eu havia dito o INSERT funciona. No campo descricao da tabela ele grava assim: {\rtf1\ansi\ansicpg1252\deff0\deflang1046{\fonttbl{\f0\fnil\fcharset0 Arial;}} \viewkind4\uc1\pard\fs18 Teste\par } Ao tentar alterar o texto com o UPDATE a resposta que tenho é: Incorrect syntax near 'e7'. Mas se eu alterar a palavra animação para animacao ele faz o UPDATE.
M6 Posted November 30, 2016 at 06:05 PM Report #600962 Posted November 30, 2016 at 06:05 PM Fácil, tens de fazer o escape das plicas. O campo descrição guarda o conteúdo do ficheiro RTF (um RTF não é mais do que um ficheiro de texto com tags específica, tipo latex) e quando tens um RTF cujo conteúdo é apenas a palavra "animação" tens {\rtf1\ansi\ansicpg1252\deff0\deflang2070{\fonttbl{\f0\fnil\fcharset0 Calibri;}} {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang22\f0\fs22 amina\'e7\'e3o\par } Se reparares, tens \'e7\'e3o no meio do texto. Quando tentas executar o comando de SQL ele acha a ' antes do e7 e acha que estás a fechar a string, e como e7 não é algo que o parser esteja à espera, tens um erro de sintaxe. Para resolveres, basta que substituas todas as ' por '' no texto que vais meter no campo. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
williamjda Posted November 30, 2016 at 06:20 PM Author Report #600964 Posted November 30, 2016 at 06:20 PM 13 minutos atrás, M6 disse: Fácil, tens de fazer o escape das plicas. O campo descrição guarda o conteúdo do ficheiro RTF (um RTF não é mais do que um ficheiro de texto com tags específica, tipo latex) e quando tens um RTF cujo conteúdo é apenas a palavra "animação" tens {\rtf1\ansi\ansicpg1252\deff0\deflang2070{\fonttbl{\f0\fnil\fcharset0 Calibri;}} {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang22\f0\fs22 amina\'e7\'e3o\par } Se reparares, tens \'e7\'e3o no meio do texto. Quando tentas executar o comando de SQL ele acha a ' antes do e7 e acha que estás a fechar a string, e como e7 não é algo que o parser esteja à espera, tens um erro de sintaxe. Para resolveres, basta que substituas todas as ' por '' no texto que vais meter no campo. Mas quando eu removo as ' do meu codigo acima, ele continua dando erro proximo a \. Porem se colocar outra " não consigo referencia o textbox no codigo SQL.
williamjda Posted November 30, 2016 at 06:21 PM Author Report #600965 Posted November 30, 2016 at 06:21 PM o codigo do vb é este: Dim cmd As SqlCommand = ConectionBD.CreateCommand cmd.CommandText = ("UPDATE Cadastro_Modelo_Documento SET " _ & "descricao = '" & Cadastro_Modelo_Documento_Editor.txtdescricao.Rtf & "'," _ & "empresa = '" & System.txtempresa.Text & "'," _ & "dataregistro = '" & Mid(Date.Now, 7, 4) & "/" & Mid(Date.Now, 4, 2) & "/" & Mid(Date.Now, 1, 2) & "'," _ & "login = '" & System.txtlogin.Text & "'" _ & " WHERE iddocumento = '" & Cadastro_Modelo_Documento.DataGrid_Dados.CurrentRow.Cells(0).Value & "'") 'ABRE A CONEXÃO COM O BANCO ConectionBD.Open() 'EXECUTA O COMANDO DO UPDATE cmd.ExecuteNonQuery() 'FECHA A CONEXÃO COM O BANCO ConectionBD.Close() Conforme disse se eu remover as ' simples o erro fica proximo a \ e se colocar outra " dupla ele não referencia o campo textbox
M6 Posted December 2, 2016 at 12:02 PM Report #600981 Posted December 2, 2016 at 12:02 PM Tens de fazer escape de todos os carateres especiais que possam estar a comprometer a sintaxe do comando update. A melhor forma que tens para fazer o debug é veres o comando tal como vai ser executado e fazeres o mesmo diretamente na base de dados. Assim vais vendo os erros que vais tendo e vais implementando as correções necessárias que tens de fazer na tua aplicação. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
Solution williamjda Posted March 21, 2017 at 03:24 PM Author Solution Report #603296 Posted March 21, 2017 at 03:24 PM Consegui. O código ficou assim. Try Dim cmd As SqlCommand = ConectionBD.CreateCommand Using com As New SqlCommand("UPDATE Cadastro_Modelo_Documento SET" _ & " descricao = @descricao" _ & " WHERE iddocumento = '" & Cadastro_Modelo_Documento.DataGrid_Dados.CurrentRow.Cells(0).Value & "'", ConectionBD) com.Parameters.AddWithValue("@descricao", Cadastro_Modelo_Documento_Editor.txtdescricao.Rtf) 'ABRE A CONEXÃO COM O BANCO DE DADOS ConectionBD.Open() 'VALIDA OS CAMPOS E EXECUTA O COMANDO com.ExecuteNonQuery() 'FECHA A CONEXÃO COM O BANCO ConectionBD.Close() End Using Catch ex As Exception 'EM CASO DE ERRO, RETORNA A MENSAGEM MsgBox(ex.Message, MsgBoxStyle.Exclamation, "1 - UPDATE_Modelo_Documento_Alterar") 'FECHA A CONEXÃO COM O BANCO ConectionBD.Close() End Try Obrigado a todos.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now