Builder 6: Определить тип поля и т.д.

Форум для программистов

Сообщение Scalder » Чт апр 21, 2005 7:49 am

Друг попросил написать работу :-(. На билдере <!--emo&:huh:-->[img]style_emoticons/<#EMO_DIR#>/huh.gif[/img]<!--endemo-->
Стоит задача: сделать что-то типа менеджера БД.
Что у меня уже получилось:
1) Подключиться к БД
2) Получить название всех таблиц
3) Получить все поля оттуда
4) Загрузить всё это в дерево.

Теперь задача:
Как определить тип поля в таблице?

У меня сейчас используються след. компоненты:
ADOConnection - подключение
ADOTable - название полей

Копание в этих компонентах не привело к желаемому результату.
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение Mishail » Чт апр 21, 2005 7:53 am

Сервер БД какой?
<a href="http://www.foobar2000.ru/" target="_blank">Изображение</a>| <!--coloro:#009900--><span style="color:#009900"><!--/coloro--><a href="http://irc.run.net/Pix/ircmap.txt" target="_blank">RUSNet:</a> #miranda #foobar2000 #mozilla<!--colorc--></span><!--/colorc-->
Mishail
Полковник
 
Сообщений: 1196
Зарегистрирован: Ср апр 03, 2002 9:30 pm
Откуда: Владивосток
Пункты репутации: 0

Сообщение Scalder » Чт апр 21, 2005 10:09 am

2Mishail
подключаюсь к mdb файлу, локально.

И ещё в догонку:
В акксесе есть возможность задать описание поля - хочеться тоже с ними поработать, как это можно сделать? Отловить таблицу где всё это дело храниться?
Или придеться изобретать велосипед и хранить это дело в отдельной "секретной" таблице.
Последний раз редактировалось Scalder Чт апр 21, 2005 11:10 am, всего редактировалось 1 раз.
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение poiuytr » Чт апр 21, 2005 1:39 pm

<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Как определить тип поля в таблице?<!--QuoteEnd--></div><!--QuoteEEnd-->
Воспользоваться свойством
Код: выделить все
TField::DataType
Оно определено как
Код: выделить все
__property TFieldType DataType = {read=FDataType, nodefault};
, где TFieldType это
Код: выделить все
enum TFieldType { ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid };
Например так
Код: выделить все
switch(AdoTable->Fields->Field[0]->DataType)
{
 case ftInteger: //...
 case ftFloat://...
}


<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->В акксесе есть возможность задать описание поля - хочеться тоже с ними поработать, как это можно сделать?<!--QuoteEnd--></div><!--QuoteEEnd--> Что такое "описание поля"? Комментарий?
Последний раз редактировалось poiuytr Чт апр 21, 2005 1:41 pm, всего редактировалось 1 раз.
Hasta la victoria siempre!
poiuytr
Капитан
 
Сообщений: 233
Зарегистрирован: Ср авг 14, 2002 6:04 pm
Откуда: Рига, Латвия
Пункты репутации: 0

Сообщение Scalder » Чт апр 21, 2005 3:39 pm

2poiuytr<!--QuoteBegin-poiuytr+Apr 21 2005, 17:39--><div class='quotetop'>QUOTE(poiuytr @ Apr 21 2005, 17:39)</div><div class='quotemain'><!--QuoteEBegin-->Что такое "описание поля"? Комментарий?
[right][snapback]172521[/snapback][/right]
<!--QuoteEnd--></div><!--QuoteEEnd-->
да
Но как я понял там есть только описание (комментарий) к полям, а не к таблицам :-(.
Поэтому я вижу, что придеться изобретать велосипед :-( - плохо :-(

А за код спасибо...
Сейчас займусь им и о результатах обязательно сообщу.
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение Scalder » Пт апр 22, 2005 9:34 am

Очень странно...
Делаю так:
ADOTable1->TableName = ST->Strings[curTable].c_str();
ADOTable1->Fields->Fields[0]->DataType;

На что программа при исполнении говорит и ссыллаеться на вторую строку.

---------------------------
Debugger Exception Notification
---------------------------
Project main.exe raised exception class EListError with message 'List index out of bounds (0)'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

И ещё вопрос ламерский :-))
Как сконвертить int в String или *char
Почему-то не хочет со мной этот билдер дружить
Последний раз редактировалось Scalder Пт апр 22, 2005 9:38 am, всего редактировалось 1 раз.
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение Elzor » Пт апр 22, 2005 10:03 am

По-моему, все-таки
ADOTable1->Fields->Field[0]->DataType;
BCB под рукой нет, проверить не могу...
И собственно что ты этой строкой сказать-то хочешь? Не присваивания, ничего...
<span style='color:purple'>Люди не знают, что лисы умеют лазить по деревьям, если очень сильно захотят. Вот белки - те знают.</span><span style='color:gray'> (с) П.Бигл</span>
--------------------
<a href='http://foobar2000.ru/forum/' target='_blank'>Новый Оффорум Foobar2000</a>
--------------------
<a href='http://wincmd.ru/download.php?id=neropanel' target='_blank'>Neropanel</a> - плагин для записи CD из TC, используя NeroAPI <a href='http://www.fforum.ru/index.php?showtopic=19193&hl=' target='_blank'>обсуждение плагина</a>
--------------------
<a href='http://www.spikelee.fatal.ru' target='_blank'>Изображение</a>
Elzor
Полковник
 
Сообщений: 1157
Зарегистрирован: Пт дек 24, 2004 2:59 pm
Откуда: Орск
Пункты репутации: 0

Сообщение Scalder » Пт апр 22, 2005 10:30 am

2Elzor
ADOTable1->Fields->Field[0]
Есть только с "s" на конце. :-)

А код у меня вообще-то такой :-)
Я уж вроде не совсем лох :-)
switch(ADOTable1->Fields->Fields[0]->DataType){
case ftInteger:
MessageBox(0,"Целое","Ошибка",MB_OK);
break;
default:
MessageBox(0,"ХЗ","Ошибка",MB_OK);
break;
}

(Пробовал примерчик накидать)
А вот не пашет он :-(
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение Elzor » Пт апр 22, 2005 11:25 am

От черт... сам попался. :(
Попробуй просто
ADOTable1->Fields->Fields[0].DataType
ADOTable1->Fields[0].DataType

ADOTable1->Fields - указатель на массив ADOTable1->Fields[0] - уже объект
<span style='color:purple'>Люди не знают, что лисы умеют лазить по деревьям, если очень сильно захотят. Вот белки - те знают.</span><span style='color:gray'> (с) П.Бигл</span>
--------------------
<a href='http://foobar2000.ru/forum/' target='_blank'>Новый Оффорум Foobar2000</a>
--------------------
<a href='http://wincmd.ru/download.php?id=neropanel' target='_blank'>Neropanel</a> - плагин для записи CD из TC, используя NeroAPI <a href='http://www.fforum.ru/index.php?showtopic=19193&hl=' target='_blank'>обсуждение плагина</a>
--------------------
<a href='http://www.spikelee.fatal.ru' target='_blank'>Изображение</a>
Elzor
Полковник
 
Сообщений: 1157
Зарегистрирован: Пт дек 24, 2004 2:59 pm
Откуда: Орск
Пункты репутации: 0

Сообщение Scalder » Пт апр 22, 2005 11:29 am

2Elzor
Нет!
Дело было не в этом :-)))
Разобрался!
Нужно было сделать активным ADOTable
ВОт блин, почему небыло уточнения в хелпе?
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение poiuytr » Пт апр 22, 2005 8:11 pm

<!--QuoteBegin-Scalder+Apr 22 2005, 11:34--><div class='quotetop'>QUOTE(Scalder @ Apr 22 2005, 11:34)</div><div class='quotemain'><!--QuoteEBegin-->Как сконвертить int в String или *char<!--QuoteEnd--></div><!--QuoteEEnd-->
Код: выделить все
ADOTable1->Fields->Fields[0]->AsString;
ADOTable1->Fields->Fields[0]->AsInteger;
ADOTable1->Fields->Fields[0]->AsFloat;
либо
Код: выделить все
int iInt = 10;
AnsiString asString = IntToStr(iInt);
char *pszString = asString.c_str()
Hasta la victoria siempre!
poiuytr
Капитан
 
Сообщений: 233
Зарегистрирован: Ср авг 14, 2002 6:04 pm
Откуда: Рига, Латвия
Пункты репутации: 0

Сообщение poiuytr » Пт апр 22, 2005 8:31 pm

<!--QuoteBegin-Elzor+Apr 22 2005, 13:25--><div class='quotetop'>QUOTE(Elzor @ Apr 22 2005, 13:25)</div><div class='quotemain'><!--QuoteEBegin-->ADOTable1->Fields - указатель на массив ADOTable1->Fields[0] - уже объект<!--QuoteEnd--></div><!--QuoteEEnd-->ADOTable1->Fields -- указатель на экземпляр класса TFields
ADOTable1->Fields->Fields[0] -- свойство, суть метод, который возвращает указатель на определённый экземпляр класса TField.
Hasta la victoria siempre!
poiuytr
Капитан
 
Сообщений: 233
Зарегистрирован: Ср авг 14, 2002 6:04 pm
Откуда: Рига, Латвия
Пункты репутации: 0

Сообщение Scalder » Сб апр 23, 2005 2:13 pm

Вопрос:
Это только у меня или у всех на коде:
ADOTable1->Fields->FieldByName(Название_поля)->DataSize
Всегда выдает или 0 или 4...
Т.е. неопределят размерность поля :-(
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение poiuytr » Вс апр 24, 2005 9:54 am

<!--QuoteBegin-справка+--><div class='quotetop'>QUOTE(справка)</div><div class='quotemain'><!--QuoteEBegin-->Indicates the amount of memory needed to store a field component’s value.

__property int DataSize = {read=GetDataSize, nodefault};

Description

Check DataSize to determine the number of bytes required to store a field component’s value. Use DataSize to determine the required size of a buffer for working with the field’s value in native format. For example, use DataSize to determine the buffer size needed by the GetData and SetData methods.

The value of DataSize for TField is 0. Most descendants of TField override this property to specify the size required by the specific field type they represent. BLOB fields, however, represent data of indeterminate size. They do not override the inherited method, so the value of DataSize for BLOB fields is 0. A value of zero should not be interpreted as meaning the field value requires no memory. A value of zero indicates that the memory required for the field is indeterminate.<!--QuoteEnd--></div><!--QuoteEEnd-->

Вообщем попробуй сначала привести к нужному типу, а потом смотреть
DataSize.
Код: выделить все
((TStringField*)(ADOTable1->Fields->FieldByName(Название_поля))->DataSize
Последний раз редактировалось poiuytr Вс апр 24, 2005 10:28 am, всего редактировалось 1 раз.
Hasta la victoria siempre!
poiuytr
Капитан
 
Сообщений: 233
Зарегистрирован: Ср авг 14, 2002 6:04 pm
Откуда: Рига, Латвия
Пункты репутации: 0

Сообщение Scalder » Вс апр 24, 2005 10:29 am

2poiuytr
Уже нашел и снова разобрался :-)))
Может у тебя аська есть?
Тогда-бы не было этой задержки :-)
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

След.

Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

cron