Ir para conteúdo
Fórum Script Brasil
  • 0

Não consigo guardar registos do tipo varchar(max)


manuelarroz

Pergunta

Boas Rapaziada,

O meu problema é talvez simples de mais para voçes que seguramente já passaram por isso.

Tenho a necessidade de criar campos do tipo Varchar(Max) por os do tipo Text vão desta para melhor (segum os boatos!!), ok

Agora vejam um simples codigo que não quer rodar !!

Set oCnn    = Server.CreateObject("ADODB.Connection") ' Set or clean up last object of ADO Connection 
oCnn.Open "Provider=SQLOLEDB;Data Source=MeuServidor;Initial Catalog=MinhaDB;User ID=eu;Password=secreto;"

Set rsTemp    = Server.CreateObject("ADODB.Recordset")

oCnn.BeginTrans ' Begin a new transaction with the table
rsTemp.Open "SELECT * FROM minha_tabela", oCnn, adOpenStatic, adLockOptimistic
rsTemp.AddNew

rsTemp("nome_campo")                = "texto grande...."   ' Campo do tipo Varchar(Max)
rsTemp.Update

If Err.Number = 0 Then
    oCnn.CommitTrans ' Commit transactions made
Else
    oCnn.RollbackTrans
End If

O error que da:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E21) A operação de múltiplos passos OLE DB gerou erros. Verifique cada valor de estado OLE DB, se disponível. Não foi efectuado nenhum trabalho.

Nota:

Se troco o tipo de campo por Varchar(50) ou text tudo roda perfeito!!

Estou a usar SQL Server 2005 e o IIS6 (Windows XP Pro Serv. Pack 3)

alguém tem alguma dica ?

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

que tale:

CHAR(N): Armazena N caracteres fixos (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco.

VARCHAR(N): Armazena N caracteres (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido.

TEXT: Armazena caracteres (até 2.147.483.647) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que 2.147.483.647, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

NCHAR(N): Armazena N caracteres fixos (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco.

NVARCHAR(N): Armazena N caracteres (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido.

NTEXT: Armazena caracteres (até 1.073.741.823) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que 1.073.741.823, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

Link para o comentário
Compartilhar em outros sites

  • 0
que tale:

CHAR(N): Armazena N caracteres fixos (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco.

VARCHAR(N): Armazena N caracteres (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido.

TEXT: Armazena caracteres (até 2.147.483.647) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que 2.147.483.647, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

NCHAR(N): Armazena N caracteres fixos (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco.

NVARCHAR(N): Armazena N caracteres (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido.

NTEXT: Armazena caracteres (até 1.073.741.823) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que 1.073.741.823, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado.

Boa Tarde Pessoal,

Como é bom ter pessoas sempre atentas a ajudar ao proximo!

Esses dias estive trabalhando muito e infelizmente meu tempo foi muito corrido, acredito que esses dias terei um tempinho suficiente para passar um pouco do conhecimento que tenho para vocês, Obrigado!

Para quem não sabe os tipos de dados varchar(max), nvarchar(max) e varbinary(max) são extensões de varchar,nvarchar e varbinary o qual armazenam 2gigabytes (GB). temos também outros tipos de dados o qual eu recomendo que não utilizarem pois serão descontinuados em versões futura do SQL Server conhecidos como text, ntext e image o qual é usado specificando o tamanho máximo. Ao invés de utilizarmos esses tipos de dados que não estaram dísponivel em versões futuras recomendo á todos vocês que utilizem os primeiros tipos de dados o qual citei no ínicio deste artigo, um pequeno exemplo de como utilizarmos esses tipo de dados seria:

CREATE TABLE TBL01
(
ProdutoID INT,
ProdutoDESC nvarchar(max)
)

CREATE TABLE TBL02
(
ProdutoID INT,
ProdutoDESC varchar(max)
)

CREATE TABLE TBL03
(
ProdutoID INT,
ProdutoDESC varbinary(max)
)

Agora quém tiver a solucção para o problema exposto fica a minha eterna ajuda p'ra que vier!

Link para o comentário
Compartilhar em outros sites

  • 0
não entendi o proposita da sua postagem

É muito simples!

Quando fizes-te a descripção dos tipos de campos exemplo Varchar(N) onde N pode ir até 8000 não mencionaste um dos sub-tipos novo que tem a partir da versão SQL Server 2005 que é o Varchar(MAX) onde o 'MAX' e mesmo un literal e não um valor númerico. Dai a minha postagem anterior que quis explicar um poco a introducção destes novos tipos de campos no MS SQL Server e já agora alertar que os campos do tipo TEXT vão ser descontinuados.

Ora bem, sendo assim se tiveres instalado o SQL Server 2005 Express Edition e crias uma Tabela com um campo do tipo Varchar(MAX) e a partir do código que menciono no inicio , e consegires fazer um registo novo na tabela a partir de um pagina asp! Avisa-me porque eu não estou a conseguir com ese tipo de campo Varchar(MAX) se for qualquer outro (exemplo TEXT, Varchar(50), etc...) tudo ok mas com o campo do tipo Varchar(MAX) não me esta a dar !!!

Ca vai o codigo novamente (experimenta só pra veres!)

Set oCnn    = Server.CreateObject("ADODB.Connection") ' Set or clean up last object of ADO Connection 
oCnn.Open "Provider=SQLOLEDB;Data Source=MeuServidor;Initial Catalog=MinhaDB;User ID=eu;Password=secreto;"

Set rsTemp    = Server.CreateObject("ADODB.Recordset")

oCnn.BeginTrans ' Begin a new transaction with the table
rsTemp.Open "SELECT * FROM minha_tabela", oCnn, adOpenStatic, adLockOptimistic
rsTemp.AddNew

rsTemp("nome_campo")                = "texto grande...."   ' Campo do tipo Varchar(Max)
rsTemp.Update

If Err.Number = 0 Then
    oCnn.CommitTrans ' Commit transactions made
Else
    oCnn.RollbackTrans
End If

Muito obrigado pela tua atenção!!! só espero que mais olhos e miolos consigam ver o erro já que eu não sei o que possa ser!

Link para o comentário
Compartilhar em outros sites

  • 0

certo mais tu tem certeza que o sql server q tu usa é 2005+?

To solve this problem, Microsoft introduced the VARCHAR(MAX),  NVARCHAR(MAX), and VARBINARY(MAX) data types in SQL Server 2005. These data types can hold the same amount of data BLOBs can hold (2 GB) and they are stored in the same type of data pages used for other data types. When data in a MAX data type exceeds 8 KB, an over-flow page is used. SQL Server 2005 automatically assigns an over-flow indicator to the page and knows how to manipulate data rows the same way it manipulates other data types. You can declare variables of MAX data types inside a stored procedure or function and even pass them as variables. You can also use them inside string functions.

Microsoft recommend using MAX data types instead of BLOBs in SQL Server 2005. In fact, BLOBs are being deprecated in future releases of SQL Server.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...