Форум: "Базы";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];
ВнизКак узнать имена таблиц содержащихся в БД. Найти похожие ветки
← →
Matvey (2002-01-27 15:43) [0]Есть база *.MDB, необходимо узнать имена таблиц содержащихся в этой базе, причем именно программно (run time), эдакая процедура
GetTablesName :), т.к. юзверю необходимо будет выбирать из таблиц, то с чем ему предстоит работать.
Очень надеюся на вашу помощь.
_______________________________
СПАСИБО.
← →
wicked (2002-01-27 15:50) [1]в access"е есть такая вещь - системные таблицы... по умолчанию их не видно, но если в access поставить галку "системные объекты" в диалоге "Параметры", закладка "Вид" (меню Сервис/Параметры), то их можно просматривать... далее всё очевидно - смотрим что где лежит и пишем необходимый код в delphi...
← →
Matvey (2002-01-27 20:17) [2]Да совет конечно дельный, но как в этой каше разобраться единственный объект в котором проскальзывают названия таблиц называется MSysObjects, положем я в состоянии написать SQL запрос на поиск там и выуживание TableName, но вот как это сделать в Delphi.
Разве что
Database1.Database := "XXX.mdb";
Table1.TableName:="MSysObjects";
Сомневаюсь что это будет работать может есть иной способ.
ПОДСКАЖИТЕ.
_______________________________________
Спасибо.
← →
Matvey (2002-01-27 20:21) [3]Может компонентик специальный есть про кторорый я не знаю или кто-нибудь с этим сталкивался, потому как, как же работать с большой базой не зная списка таблиц!?
← →
wicked (2002-01-27 22:04) [4]насчёт компонентика не знаю.... хотя.... посмотри в tsession... там, если порыться, чего-то такое есть...
← →
Matvey (2002-01-27 22:26) [5]Что такое tressio понятия не имею, но вроде выход кроется в функции GetSourceTableName это функция из KADaoTable FreeWare компонентик, но хелп такой скудный что просто бесит
------------------------------------------------------------
Function GetSourceTableName(FieldName:String):String;
Returns the source name of the Table when field with name FieldName is a part of join between two or more tables.
-------------------------------------------------------------
Если кто знает как с этим орудовать обязательно напишите, очень прошу. Хотя млжет есть и другие варианты
______________________
С нетерпением жду :)
Если кому интересно, то я делал так:
_______________________________________________________________
var ttt:string;
begin
KADaoDatabase1.Database := "XXX.mdb";
KADaoDatabase1.UserName := "Admin";
KADaoDatabase1.Connected := True;
KADaoTable1.Database :=KADaoDatabase1;
KADaoTable1.TableName :="Table1" ; //Иначе ругается
KADaoTable1.Open;
//--------------------------->>
KADaoTable1.GetSourceTableName(ttt);
Edit1.Text:=ttt;
KADaoTable1.Close ;
KADaoDatabase1.Connected := False;
end;
И на все это НОЛЬ эмоций.! :(
Что в скобках указывать неизвестно, там толи то что функция возвращает, толи что-то еще. Ваши соображения (исходя из хелпа)...
← →
wicked (2002-01-27 22:37) [6]там же ясно написано - возвращает имя исходной таблицы, когда поле <ИмяПоля> является продуктом join (не переводится :) двух и более таблиц... т. е., если у нас есть запрос вида:
select a.f1, a.f2, b.zz from a inner join b on a.f3 = b.f3
то ф-ция вернёт "а" для "f1" и "f2", "b" для "zz"....
имхо это не то что тебе надо....
но если ты используешь bde, то посмотри в help по TSession, процедура GetTableNames....
← →
Станислав (2002-01-28 10:48) [7]Как создал так и читай. Ведь я так понял, что в процессе работы есть возможность создавать новые таблицы? Вот создаешь там например ОгурцыТаблица, то так же ее и читаешь. А если юзверю разбиратся с названиями таблиц, так он хотя бы 2-х месячные курсы по разработке баз данных долже пройти.
← →
Matvey (2002-01-29 00:17) [8]Все нормальо, я как всегда все усложняю, я просто завел еще одну таблицу содержащую имена имеющихся. Бывает :).
← →
RAVEN (2002-01-29 09:01) [9]Ещё один способ получить таблицы из *.mdb, но не показывает прилинкованные таблицы в D6 покрайней мере. ADOConnection.GetTableNames(ObjectList,flag);
ObjectList:TStrings;
flag:boolean - позволяет получать также системные таблицы.
Это лучше чем заводить таблицу вручную, т.к. нет привязки приложения к БД.
← →
Upendra (2002-01-29 10:47) [10]
MainDM: TMainDM;
TableLists: TStrings;
TableLists := TStringList.Create;
MainCon.GetTableNames(TableLists, False);
← →
Matvey (2002-01-30 00:53) [11]Огромное спасибо попробуем.
← →
Matvey (2002-01-31 02:15) [12]Lkz RAVEN © - пример работает на все 100, за небольшим исключением
ADOConnection1.GetTableNames(ObjectList,flag);
ObjectList:TStringsList
Относительно предложений Upendra
MainDM: TMainDM; //------>> что ето такое (компонент?)
TableLists: TStrings;
TableLists := TStringList.Create;
MainCon.GetTableNames(TableLists, False);
___________________________________________________
Не работает.
Но вопрос - то в другом, при использовании ADO, на машине клиента должен быть установлен ADO 2.1, а также Microsoft SQL Server, а в ODBE должен иметься драйвер OLE DB для Access (в моем случае),для BDE всякие Alias и тому подобное, т.к., не имею возможности проверить спрашиваю у всех, что можно использовать
(ADO, BDE ...), чтобы при переносе программы работающей с Access, на клиентскую машину, грубо говоря, кроме *.EXE, ни чего не надо было тащить (DLL, OCX и т.п.).?
________________________________________________________
Спасибо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c