🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
6 messages
6 total messages Started by immo Wed, 01 Mar 2017 14:05
FireDAC MSSQL i pole typu TEXT
#82728
Author: immo
Date: Wed, 01 Mar 2017 14:05
19 lines
1885 bytes
Witam,

Mam pytanie, które wyda się proste, ale:
jak zapisywać poprawnie tekst do bazy danych do pola które jest zdefiniowane jako Data Type: TEXT.

Do tej pory w programie było 
   query.fieldbyName('nazwa').asstring;
I pasowało do momenty gdy ktoś chciał wstawić tekst dłuższy niż coś około 8tys znaków. To generowało błąd który jak doczytałem jest generowany przez Delphi.

W każdym razie zmieniłem ten zapis na streamy, czyli:
   query.ParamByName('nazwa').LoadFromStream(memorystream,ftBlob)

Oczywiście takie coś też generuje bład typu:
Operand type clash: varbinary(max) is incompatible with text.

Teraz pytanie jak temu zaradzić? Czyli jak zapisać tekst dłuższy od 8 tyś. znaków to pola typu TEXT bez zmiany typu pola w bazie?

pozdrawiam,
Przemek O.
Re: FireDAC MSSQL i pole typu TEXT
#82729
Author: immo
Date: Wed, 01 Mar 2017 14:07
6 lines
1652 bytes
W dniu środa, 1 marca 2017 15:05:46 UTC+1 użytkownik immo napisał:

Zapomniał bym: Delphi najnowsze. W googlach szukałem, nic sensownego nie znalazłem - być może źle szukam. Jeśli tak to proszę o naprowadzenie.

> pozdrawiam,
> Przemek O.
Re: FireDAC MSSQL i pole typu TEXT
#82730
Author: miab
Date: Wed, 01 Mar 2017 14:22
15 lines
1465 bytes
W dniu 2017-03-01 o 15:05, immo pisze:
> Witam,
>
> Mam pytanie, które wyda się proste, ale:
> jak zapisywać poprawnie tekst do bazy danych do pola które jest zdefiniowane jako Data Type: TEXT.
>
> Do tej pory w programie było
>    query.fieldbyName('nazwa').asstring;
> I pasowało do momenty gdy ktoś chciał wstawić tekst dłuższy niż coś około 8tys znaków. To generowało błąd który jak doczytałem jest generowany przez Delphi.
>

Może to?
http://stackoverflow.com/questions/564755/sql-server-text-type-vs-varchar-data-type

miab
Re: FireDAC MSSQL i pole typu TEXT
#82732
Author: wloochacz
Date: Wed, 01 Mar 2017 14:54
18 lines
1589 bytes
W dniu 2017-03-01 o 15:05, immo pisze:
> Witam,
>
> Mam pytanie, które wyda się proste, ale:
Kluczowe pytanie jest jakie masz DataType tego pola i typ klasy w FireDAC?

OIDP to DataType takiego pola powinno być ftMemo lub ftWideMemo (dla NTEXT).
Jeśli jest inaczej, to powinieneś go zmusić do poprawnego mapowania (np. 
przez konfigurację datatype mapping - sam wiesz jak), a wtedy nie 
powinno być problemów.

Poza tym, text dla mssql jest oznaczony jako (highly) _deprecated_ i 
będzie wywalony w następnej wersji mssqla.

Przejdź na Varbinary...

-- 
wloochacz
Re: FireDAC MSSQL i pole typu TEXT
#82731
Author: immo
Date: Wed, 01 Mar 2017 14:55
25 lines
2642 bytes
W dniu środa, 1 marca 2017 15:23:57 UTC+1 użytkownik miab napisał:
> W dniu 2017-03-01 o 15:05, immo pisze:
> > Witam,
> >
> > Mam pytanie, które wyda się proste, ale:
> > jak zapisywać poprawnie tekst do bazy danych do pola które jest zdefiniowane jako Data Type: TEXT.
> >
> > Do tej pory w programie było
> >    query.fieldbyName('nazwa').asstring;
> > I pasowało do momenty gdy ktoś chciał wstawić tekst dłuższy niż coś około 8tys znaków. To generowało błąd który jak doczytałem jest generowany przez Delphi.
> >
> 
> Może to?
> http://stackoverflow.com/questions/564755/sql-server-text-type-vs-varchar-data-type

Ale jak to się ma do rozwiązania problemu? Ja używam Varchar/varbinary itd. Jednak w zastanym systemie mam TEXT. Wszelkie dysputy na temat używania pól TEXT czy VARCHAR/NVARCHAR znam.

Poza tym, dziwne jest to że przez np, dbForge do pola TEXT na sqlserver 2016 udało mi się wstawić tekst całej książki znacznie przekraczającej 8 tys znaków :)

A tak jak piszę z wielu powodów (nieracjonalnych przyznaje, ale nie mam na to wpływu) nie mogę zmienić typu pola, choć najprościej byłoby zmienić to na varchar(max) i zapomnieć o sprawie.

Dlatego się pytam czy ktoś może coś takiego robił, bo nie chcę odkrywać czegoś na nowo.

pozdrawiam,
Przemek O.
Re: FireDAC MSSQL i pole typu TEXT
#82733
Author: immo
Date: Wed, 01 Mar 2017 15:03
30 lines
2329 bytes
W dniu środa, 1 marca 2017 15:54:51 UTC+1 użytkownik wloochacz napisał:
> W dniu 2017-03-01 o 15:05, immo pisze:
> > Witam,
> >
> > Mam pytanie, które wyda się proste, ale:
> Kluczowe pytanie jest jakie masz DataType tego pola i typ klasy w FireDAC?
> 
> OIDP to DataType takiego pola powinno być ftMemo lub ftWideMemo (dla NTEXT).
> Jeśli jest inaczej, to powinieneś go zmusić do poprawnego mapowania (np. 
> przez konfigurację datatype mapping - sam wiesz jak), a wtedy nie 
> powinno być problemów.

Patrz - nie pomyślałem o tym.

> 
> Poza tym, text dla mssql jest oznaczony jako (highly) _deprecated_ i 
> będzie wywalony w następnej wersji mssqla.
> 
> Przejdź na Varbinary...
> 

Nie mój program - nie mój problem. Firma jest dziwna. Zmiany struktury muszą być zatwierdzane przez wszystkich łącznie z zarządem :/ A na zmianę na Varchar jest odpowiedź NIE, a dlaczego - bo nie.

Chyba sobie odpuszczę, nawet jeśli to po znajomości. Wietrze problemy.

> -- 
> wloochacz

pozdrawiam,
Przemek O.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads