Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

#0 Запись переменной типа WideString в Image [D7]


balagur ©   (2007-08-06 06:38:00) 

Бодрого времени суток!
D7, SQL EM 8.0
Есть задача - записать данные из переменной типа WideString в таблицу,столбец которой типа Image.
Все бы ничего, но в переменной есть символы #0, и потому в столбец записывается только часть переменной до этого символа.
Подскажите, каким образом можно обойти #0 и записать полностью переменную в столбец.
var Sss: WideString;
begin
...
     ADOQuery1.Open;
     ADOQuery1.Edit;
     ADOQuery1.Insert;
     ADOQuery1.FieldValues['Column']:=Sss;
     ADOQuery1.Post;
....


balagur   (2007-08-06 11:01:00) [1]

Все. ЗАРАБОТАЛО!
Дело было в том, что я по спешке и кусок кода на чтение из буфера поставил перед записью )))
Еще раз БАЛЬШОЕ Спасиба:)


Anatoly Podgoretsky   (2007-08-06 10:51:00) [2]

Все указатели по определению не безопасные типы, в данном случае можно игнорировать.


balagur   (2007-08-06 10:50:00) [3]

сорри, старый кусок копипаст...


balagur   (2007-08-06 10:48:00) [4]

все равно та же ошибка +
на ReadBuffer ... UnsaeType 'PWideChar'


Сергей М.   (2007-08-06 10:45:00) [5]


> ADOQuery1.Post;
>


А это зачем ?

Ты же в дан.случае не модифицируешь запись, а только читаешь ее ..


Сергей М.   (2007-08-06 10:44:00) [6]

Size divSizeOf(WideChar)


balagur   (2007-08-06 10:41:00) [7]

ADOQuery1.Open;
     with ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName('Column'), bmRead) do
       try
          SetLength(Sss, Size / SizeOf(WideChar));
         ReadBuffer(PWideChar(Sss)^, Size);
       finally
         Free;
       end;
     ADOQuery1.Post;

Error: выделено
(Incompatible Types)


Сергей М.   (2007-08-06 10:36:00) [8]

with ADOQuery1.CreateBlobStream('Column', bmRead) do
try
SetLength(Sss, Size / SizeOf(WideChar));
ReadBuffer(PWideChar(Sss)^, Size);
finally
Free;
end;


balagur   (2007-08-06 10:18:00) [9]

Спасиба, Сергей, добавить запись получилось...
Но вот какая ерунда получается - я пытаюсь записать одни данные, а при проверке ... select Column from Table where ... получаю совершенно другие.
Как такое возможно.
Т.е. делаю Write  и тут же select и совершенно разные данные... :?


LTYBC~   (2007-08-06 09:42:00) [10]


> WriteBuffer(PWideChar(Sss)^, Length(Sss)*2);

WriteBuffer(PWideChar(Sss)^, Length(Sss)*SizeOF(WideChar));


Сергей М.   (2007-08-06 09:05:00) [11]

Вместо
ADOQuery1.FieldValues['Column']:=Sss;

используй блоб-стрим:

with ADOQuery1.CreateBlobStream('Column', bmWrite) do
try
 WriteBuffer(PWideChar(Sss), Length(Sss)*2);
finally
 Free;
end;


> ADOQuery1.Edit;


Это лишнее.


Сергей М.   (2007-08-06 09:05:00) [12]

WriteBuffer(PWideChar(Sss) ^, Length(Sss)*2);


Наверх

Титульная страница Поиск, карта сайта Написать письмо