Форум: "Базы";
Текущий архив: 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.045 c