Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

FieldName в DBexpress и ADO   Найти похожие ветки 

 
GrBob   (2006-08-16 12:45) [0]

Добрый день. Предположим, у нас есть таблица x в базе Northwind, у которой есть поле (под номером 0) с длинным имененем типа
"y123456789y123456789z123456789z123456789r123456789m123456789". Имеем программку, почти полный текст которой представлен ниже:

..........
   SQLDataSet1: TSQLDataSet;
   SQLConnection1: TSQLConnection;
   ADOConnection1: TADOConnection;
   ADOQuery1: TADOQuery;
..........

procedure TForm1.Button1Click(Sender: TObject);
begin
 with SQLDataSet1 do
 begin
   CommandText := "select * from Northwind..x";
   Open;
   ShowMessage(Fields[0].FieldName);
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 with ADOQuery1 do
 begin
   SQL.Text := "select * from Northwind..x";
   Open;
   ShowMessage(Fields[0].FieldName);
 end;
end;


При этом почему то в первом случае получаем только
y123456789y123456789z123456789z, а во втором полностью y123456789y123456789z123456789z123456789r123456789m123456789. Почему? Может где-то настраивается ограничение или есть какая другая особенность? Никак не могу понять.


 
Ega23 ©   (2006-08-16 12:49) [1]

А что по этому поводу говорит TADODataSet?


 
GrBob   (2006-08-16 12:57) [2]

procedure TForm1.Button2Click(Sender: TObject);
begin
 with ADODataSet1 do
 begin
   CommandText := "select * from Northwind..x";
   Open;
   ShowMessage(Fields[0].FieldName);
 end;
end;


говорит полный y123456789y123456789z123456789z123456789r123456789m123456789


 
sniknik ©   (2006-08-16 13:05) [3]

проверь...
перепиши и подключи модуль DBXpress.pas к себе в проект (чтоб генофонд не править)
и измени тип в нем,
DBINAME            = packed array [0..31] of Char; { holds a name }
вернее размерность. чтонибудь изменилось?


 
Ega23 ©   (2006-08-16 13:05) [4]

Ну так и пользуйся, нафиг тебе ADOQuery???


 
sniknik ©   (2006-08-16 13:08) [5]

> Ну так и пользуйся, нафиг тебе ADOQuery???
наоборот, нафиг DBXpress, проблема то в нем.

(хотя и с ADOQuery согласен, ADODataSet - более правильный выбор)


 
Desdechado ©   (2006-08-16 13:09) [6]

Очень осмысленное имя...
Остальные в таком же духе? Сочувствую...


 
GrBob   (2006-08-16 14:35) [7]


> sniknik

Нет, ничего не изменилось.


 
sniknik ©   (2006-08-16 15:12) [8]

уверен что используется именно исправленный модуль? в проект его включил?
хотя... может в используемой dll уже есть такое же ограничение, DBXpress же использует свои, под себя (и с теми же константами) писанные...

ну можеш еще проверить, с модуле SqlExpr на
procedure TCustomSQLDataSet.LoadFieldDef(FieldID: Word; var FldDesc: FLDDesc);
var
 ReadOnly: LongBool;
begin
 FldDesc.iFldNum := FieldID;
 FSQLCursor.getColumnName(FieldId, FldDesc.szName);
 FSQLCursor.getColumnType(FieldId, FldDesc.iFldType, FldDesc.iSubtype);
...

точку останова поставь, и посмотри размер массива... он меняется если ты размерность типа поменяеш?

но в общем это неважно, причина в этом (вопрос [0]), а вот можно ли это исправить другой вопрос.


 
GrBob   (2006-08-16 15:59) [9]

Именно сюда я и полез после изменения. Структура FldDsc изменилась, в поле szName стало больше символов, но после getColumnName установились только первые 32 символа, все остальные остались #0. Добавив сюда FSQLCursor.getColumnLength получил 32. Так что проблема в курсоре, интерфейс которого есть, а вот реализация, как я понял в какой-то dll, разобрать которую я не могу. Может у кого есть спецификация, в которой это описано? Тогда можно будет и не париться дальше :)


 
Desdechado ©   (2006-08-16 16:02) [10]

твой dbExpress-драйвер для твоей СУБД


 
sniknik ©   (2006-08-16 16:03) [11]

> Может у кого есть спецификация, в которой это описано?
зачем? и так все очевидно...

> Тогда можно будет и не париться дальше :)
а и не парься, и до того не надо было, используй ADO и всех делов то. (для mssql "родная" технология)


 
GrBob   (2006-08-16 16:10) [12]

Ну сейчас то это уже больше исследовательская работа. Просто на dbexpress навешан уже большой проект, чтобы его переписывать, а этот косяк я уже обошел другим способом (укоротив названия :)). Теперь мне просто интересно, описано ли это ограничение в спецификации или нет.


 
sniknik ©   (2006-08-16 16:20) [13]

> уже обошел другим способом (укоротив названия :))
сделай их еще более осмысленными... и все, больше желать нечего... (по теме...).


 
GrBob   (2006-08-16 16:24) [14]

Ну как это нечего.
Ты еще пожелай, чтобы я таблички не в Northwind"e создавал, а в своей базе, так еще лучше будет :)

Пойду искать спецификацию на просторах интернета, всем спасибо за помощь (в основном только sniknik"a касается, но все же...) ;)


 
Anatoly Podgoretsky ©   (2006-08-16 19:12) [15]

Проблема в том, что Борланд решил, что имен длиннее 31 символ быть не может.
Я до сих пор не могу понять, зачем они выпустили DBXpress, по сути ухудшенный вариант БДЕ


 
Desdechado ©   (2006-08-17 11:26) [16]

> Борланд решил, что имен длиннее 31 символ быть не может.
Ну, ни в FB, ни в Оракле - не может. В DBF, Paradox - тоже. В остальных - не знаю.
Да и смысл в длинных? Ведь безразмерными их сделать нельзя, а любое ограничение приведет к фразе "Борланд решил, что имен длиннее N символов быть не может".

> зачем они выпустили DBXpress, по сути ухудшенный вариант БДЕ
Имхо, гораздо удобнее. Причем с открытой спецификацией на драйвера. И работает стабильнее.

А что, БДЕ имена полей более 30 знаков поддерживает?


 
GrBob   (2006-08-17 14:30) [17]


> Ну, ни в FB, ни в Оракле - не может. В DBF, Paradox - тоже.
>  В остальных - не знаю.
> Да и смысл в длинных? Ведь безразмерными их сделать нельзя,
>  а любое ограничение приведет к фразе "Борланд решил, что
> имен длиннее N символов быть не может".

Т.е. такое ограничение оффициально заявлено разработчиками?


 
Desdechado ©   (2006-08-17 18:13) [18]

> ограничение оффициально заявлено
да, читать документацию



Страницы: 1 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.309 c
3-1155066396
lexander
2006-08-08 23:46
2006.10.15
Почему не работает такой запрос?


10-1124054722
Lotus
2005-08-15 01:25
2006.10.15
The server threw an exception


11-1135000241
Yozch1
2005-12-19 16:50
2006.10.15
Запуск приложения в KOL проекте


15-1158753660
Fidel
2006-09-20 16:01
2006.10.15
Типовые инструкции


15-1159255048
Экспериментатор
2006-09-26 11:17
2006.10.15
Перемешались знаки препинания, звездочки кавычки