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

mudar campo varchar para Blob


etspaz

Pergunta

bom dia pessoal, eu preciso mudar um campo do tipo varchar para Blob no firbird 1.5.4, mas está chei de dados, na verdade é um dominio q ele usa então parece fácil ir lá e trocar o tipo ou criar outro dominio e pronto, mas não sei o q preciso fazer pra garantir que os dados não serão afetados, entendem né.

uma vez alterei só o tamanho numa situação parecida, mas aí vou mudar a estrutura.

vlw

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
uma vez alterei só o tamanho numa situação parecida, mas aí vou mudar a estrutura.
etspaz, mas mudando para blob, você também estará fazendo isto. :huh:

De qualquer modo, se for "transformá-lo" em blob, você precisará criar um novo campo do tipo blob para isso e posteriormente suprimir o inicial.

Se você tiver uma base de teste (ou mesmo uma cópia do banco em questão), você poderia utilizar o IBExpert para gerar o script de alteração.

Não cheguei a fazer isto com a versão 1.5 do FB, mas na versão 2.0 (e superior) você faria algo como (isto é um exemplo baseado no bamco EMPLOYEE que acompanha o FB):

1) criar novo campo do tipo blob:

ALTER TABLE PROJECT
ADD PROJ_NAME_BLOB BLOB SUB_TYPE 1 SEGMENT SIZE 1024 CHARACTER SET WIN1252;
2) inicializar novo campo com conteúdo do que é varchar:
UPDATE PROJECT
SET PROJ_NAME_BLOB = PROJ_NAME
WHERE PROJ_NAME_BLOB IS NULL;
3) eliminando o campo a ser substituido:
ALTER TABLE PROJECT DROP PROJ_NAME;
4) alterando o nome do campo blob para o inicialmente utilizado:
ALTER TABLE PROJECT ALTER PROJ_NAME_BLOB TO PROJ_NAME;

OBS:

1) antes de executar este processo no banco "quente", não esqueça de fazer um backup;

2) ao executar este processo, certifique-se que nenhum acesso esteja sendo realizado ao banco;

3) se sua aplicação for desenvolvida em Delphi e você tiver adicionado aos componentes tipo dataset (onde referenciou esta tabela) este campo, você deverá acessar cada componente e remover e adicionar este campo para que o campo antes TStringField possa ser substituído por um TBlobField (ou algo assim). Isto vale também, para o caso de você optar por apenas mudar o tamanho do seu varchar.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

boa tarde Micheus beleza,

c ta sempre me ajudando, antes de tudo, obrigado pela atenção!

olha só, eu fiz como tu disse, porém, deu um erro, depois tentei aumentar o tamnho sem criar o campo blob, deu o mesmo erro,

pelo q andei pesquisando, parece q é erro com firebird, mas to na duvida se não tenho q fazer alguma coisa no programa.

o erro é o seguinte:

-204 Implementation limit exceeded block size exceeds implementation restriction

no delphi eu teria q excluir e incluir novamewnte o campo para aplicar a alteração, o problema é q estoou com C# neste caso, debuguei com o visual e vi q na classe q cria o dataset não tem nehuma informação sobre o "size", só cria os campos q recebem os valores trazidos da base,consulta normal joga no ds e quando vai jogar para algum outro objeto, tipo um grid, dá pau.

não é como no delphi q c vai la nas propriedades e clica aqui, clica ali e muda.

o curioso é q em outro campo fiz a mesma coisa e não dá este erro.

to na duvida se é no banco ou c# q falta alguma coisa.

mas sempre q pesquiso sobre o erro acho algo sobre firebird, só que no banco consulto, edito, insiro normamlmente no campo alterado, só dá pau, com o sistema em c#.

to começando aprender delphi, já to tendo q aprender C#, então ás vezes, tento fazer algo no c# como se estivesse no

delphi e não acho, é claro, mas to aprendendo.

sei q aqui não é lugar de c#, mas se tiver algo q eu possa fazer q tenha a ver com o banco, por favor, me indique.

se achar melhor remover para outra secção beleza.

Editado por etspaz
Link para o comentário
Compartilhar em outros sites

  • 0
eu fiz como tu disse, porém, deu um erro, depois tentei aumentar o tamnho sem criar o campo blob, deu o mesmo erro,

pelo q andei pesquisando, parece q é erro com firebird, mas to na duvida se não tenho q fazer alguma coisa no programa.

o erro é o seguinte:

-204 Implementation limit exceeded block size exceeds implementation restriction

a mensagem realmente sugere que seja alguma limitação do banco.

Se este erro ocorre quando você tenta fazer estas alterações via IBExpert, então não tem como você ficar em dúvida se tem que fazer algo na aplicação - significa que é com o banco mesmo.

Voce só tem o Firebird instalado mesmo, não é?

Alguma possibilidade de você migrar para a versão 2.0 (que já está estável)

o problema é q estoou com C# neste caso, debuguei com o visual e vi q na classe q cria o dataset não tem nehuma informação sobre o "size", só cria os campos q recebem os valores trazidos da base,consulta normal joga no ds e quando vai jogar para algum outro objeto, tipo um grid, dá pau.
Aqui foge ao meu escopo. :D

Mas, acho interessante você avaliar a troca de versão (se o fizer, não esqueça do backup).

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Quando eu disse q era o 1.5.4 estava equivocado, porque na minha máquina é 1.5.4, mas o banco q o sistema tá usando

é 2.0 e está em outra máquina.

Só tenho o firebird instalado mesmo.

No ibexpert não dá erro algum, e no próprio sistema tem outro campo q foi feita a mesma alteração e não dá erro.

são dois campos de obseervação q antes eram para 10k e agora são para 32k, um não deu problema(observacoes), já o outro(observacao6) dá este problema q citei, só na aplicação,

já pelo ibexpert sem problema.

daí a fonte da minha dúvida sobre ter q fazer algo no sistema.

Editado por etspaz
Link para o comentário
Compartilhar em outros sites

  • 0
Quando eu disse q era o 1.5.4 estava equivocado, porque na minha máquina é 1.5.4, mas o banco q o sistema tá usando é 2.0 e está em outra máquina.
Lembro que seria apropriado o uso do client compatível com a versão do banco sendo acessado.

Pelo que você diz, você tem a versão client 1.5.4 e acessa um servidor 2.0.

são dois campos de obseervação q antes eram para 10k e agora são para 32k, um não deu problema(observacoes), já o outro(observacao6) dá este problema q citei, só na aplicação, já pelo ibexpert sem problema.
Aqui fica uma dúvida. Se são campos blob, porque mudar o tamanho de 10K (que já é grande) para 32K?

Lembre-se que para este tipo de campo, o SIZE refere-se a quantidade de bytes (bloco) que será alocado a cada vez que o tamanho atual não comportar as informações, ou seja, a quantidade a mais a ser alocada.

A questão do C# acessando o banco eu fico lhe devendo.

Abraços

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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...