![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не загружается BLOB из MS SQL... Из других СУБД - загружается! [D6, MSSQL]
Миха © (2005-01-20 20:13:00)Непонятный случай вышел с загрузкой поля BLOB из MSSQL.
Код следующий:
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM mytable');
Open;
if Active then
begin
NRecs:=RecordCount;
First;
<...что-то делается...>
Close;
end;
end;
Код нормально работает, кроме ситуации, когда в таблице mytable присутствует поле типа BLOB (для MSSQL - типы image или text).
В этом случае RecordCount = -1 (!!!).
Active при этом - true!
Ситуация RecordCount=-1 недокументирована, что означает - непонятно.
Если убрать из таблицы BLOB-поле, то все Ok. Пробовал указывать имена столбцов - глючит, если присутствует имя именно BLOB-столбца.
Веселья прибавляет то, что этот глюк возникает на MSSQL, а на Interbase - нет.
Подробности: Delphi 6, MS SQL Server 2000 (пока что Evaluation 120-day, но не исчерпан), доступ через BDE, псевдонимы постоянные, все параметры в них стандартные.
Реально в таблице есть две записи.
Подозрения:
а) Что-то нужное не указано в параметрах псевдонима (вряд ли?)
б) Какая-то настройка MS SQL не так выставлена (знать бы какая)
в) Глюк BDE (на фиг бы его выкинуть, если бы был драйвер dbExpress, но увы...)
Люди, помогите советом или делом - запустите это код на своей платформе - какой будет результат?
Миха (2005-01-21 13:21:00) [1]Ну естественно, забыл int:
ADD id int NOT NULL IDENTITY PRIMARY KEY
Но проблема не здесь...
sniknik (2005-01-21 13:16:00) [2]> ни ключевое поле (ADD id NOT NULL IDENTITY PRIMARY KEY)
The definition for column 'id' must include a data type
Миха (2005-01-21 12:47:00) [3]Увы, не помогло ни BlobSize=999, ни ключевое поле (ADD id NOT NULL IDENTITY PRIMARY KEY)
sniknik (2005-01-21 11:40:00) [4]> Ключевого поля в таблице нет
заведи, и проверь еще раз.
у тебя в таком случае нет однозначного идентификатора записи, в этом случае часто используется "сборка" всех полей, будут одинаковые будет ошибка "операция действует на слишком большое количество записей", при только "блобовских" полях даже не знаю что будет, возможно попытка идентификации по "заголовкам" они везде одинаковые или по содержанию оно слишком большое... и то и то нехорошо.
в сравниваемом тобой интербейсе есть внутренний код записи, возможно (скорее всего) он используется при идентификации записи и ошибки не возникает, при аналогичной структуре таблици... (внутреннее устройство не то ;о))
Stanislav (2005-01-21 11:39:00) [5]Если будешь продолжать работать через BDE это у тебя не единственная ошибка будет.
Не думаю что BDE быстрее ADO.
Ega23 (2005-01-21 11:25:00) [6]Поздравляю, что BDE работает.
Может быть, пришлешь (можно в форум) параметры Alias?
А насчет 255 символов - Grig не причем, я проверяю DataSize у поля, то же и через AsString.
Параметры алиаса - BlobSize=999
Больше ничего не меняю.
Что касается вопроса [0], то могу посоветовать: Запрос вида Select * from .... - ИМХО, дурной тон. Выбирай именно те поля, которые тебе нужны.
Миха (2005-01-21 11:16:00) [7]2 sniknik:
Ключевого поля в таблице нет
Миха (2005-01-21 11:12:00) [8]Поздравляю, что BDE работает.
Может быть, пришлешь (можно в форум) параметры Alias?
А насчет 255 символов - Grig не причем, я проверяю DataSize у поля, то же и через AsString.
sniknik (2005-01-21 11:11:00) [9]> Как-то не тянет перелезать на ADO - она же тормозная...
вранье. те кто так говорит обычно не разобрались (не хотят) с настройками, в частности с клиентским/серверным курсором, в ADO много режимов в BDE один - серверный, настроенный на максимально быстрое открытие таблиц, в ADO по умолчанию клиентский настроен на максимальную независимость от сервера. (вот проверь "прогон" по рекордсету. в локальном ADO, будет на порядок быстрее, но поставь там тоже серверный курсор и скорости "выравняются" что при "прогоне" что при открытии)
2 Миха
терзают меня смутные сомнения... (про курсоры начал говорить, обмен впомнил... ;о))
в той таблице в которой "типы image или text" присутствуют, присутствуют какиенибудь другие поля? в частности ключевое?
Ega23 (2005-01-21 10:58:00) [10]Неужели никто с MSSQL 2000 через BDE не работает?
Я работаю.
Как-то не тянет перелезать на ADO - она же тормозная...
Иногда лучше жевать, чем говорить.
Кстати, еще глюк на той же платформе: из поля varchar(3000) или varbinary(3000) загружаются только первые 255 байт :-(
По-идее, всё, что больше 255 Grid как блоб воспринимает...
Fay (2005-01-21 10:54:00) [11]А мыши всё плакали, кололись....
Миха (2005-01-21 10:49:00) [12]Поигрался - увеличение BLOB SIZE и BLOBS TO CASHE ничего не дает.
Неужели никто с MSSQL 2000 через BDE не работает?
Как-то не тянет перелезать на ADO - она же тормозная...
Кстати, еще глюк на той же платформе: из поля varchar(3000) или varbinary(3000) загружаются только первые 255 байт :-(
Ega23 (2005-01-21 09:32:00) [13]Чудесно... Пошел вешаться... Или подождать, отговорят?
В настройках алиаса поиграйся с параметрами BlobSize и Blobs To Cashe.
SLP (2005-01-21 08:45:00) [14]Мне, примерно в такой же ситуации помогло, когда я поменяла в BDE Blob size. Для 2000-го MSSQL поставила 32, хотя для 6.5 стояло - 64.
sniknik (2005-01-21 02:05:00) [15]файл bdereadme.txt
The following ODBC drivers are certified for use with BDE.
ODBC Driver Manager 3.5
-----------------------
Fully certified drivers:
ACCESS (Microsoft 3.40-Access 95 and 97)
FOXPRO (Microsoft 3.40)
MSSQL Server (Microsoft 3.00-Server version 6.5)
MSSQL Server (Intersolv 3.01-Server version 6.5)
ORACLE 7 (Intersolv 3.01-Server version 7.3)
Certified for basic functionality:
...
вешайся... или подожди...
тут же не написано что оно не работает, наоборот, работает .. с 6,5 и с 2000м будет, если не затронеш то чего нет/отлично в/от 6,5.
и еще вопрос от этого ли твоя ошибка.
Миха (2005-01-20 20:48:00) [16]Спасибо за совет :-(
Итак, BDE не поддерживает MS SQL 2000!
Чудесно... Пошел вешаться... Или подождать, отговорят?
sniknik (2005-01-20 20:31:00) [17]MS SQL 2000 имеется ввиду естественно, в последней фразе.
sniknik (2005-01-20 20:29:00) [18]> запустите это код на своей платформе - какой будет результат?
и без запуска скажу, ошибка на операции
> <...что-то делается...>
;о))
> RecordCount = -1 (!!!).
нормальное явление для серверного курсора.
> MS SQL Server 2000 (пока что Evaluation 120-day, но не исчерпан), доступ через BDE
BDE поддерживает MS SQL только до версии 6,5 (насколько помнится ... посмотри там ридми с ним есть), интербейз, версия какая? менялось ли в нем чтото что ты используеш, в новых версиях, что точно изменилось в MS SQL?
для старших версий правильная работа естественно не гарантирована. (это так в общем, возможно к этой конкретной ошибке отношения не имеет)
переходи на ADO, там по крайней мере он (MS SQL) поддержан.