Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.038 c
3-1155190299
zdm
2006-08-10 10:11
2006.10.15
куча query,table и т.д.


3-1155824707
incm
2006-08-17 18:25
2006.10.15
Как используя BDE и MS SQL Server получать RAISEROR( Err ,10)


15-1159037200
MAster_
2006-09-23 22:46
2006.10.15
Подскажите пож. как сделать для своей программы Skin


2-1159174243
KyRo
2006-09-25 12:50
2006.10.15
Как сделать прозрачным лейбл


2-1159264876
vegarulez
2006-09-26 14:01
2006.10.15
Вопрос про мышь и 2 монитора (раб. стола).





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский