Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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 и т.п.).?
________________________________________________________
Спасибо.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.016 c
14-79451          Lex                   2002-01-08 18:45  2002.02.25  
Почему у меня не работает функция valueexists?


1-79341           Тутов Роман           2002-02-08 10:45  2002.02.25  
OLE Server


14-79445          Nest                  2002-01-08 09:29  2002.02.25  
Как себя вучствуем полсе праздников ?... %()


1-79360           DJ X                  2002-02-03 16:13  2002.02.25  
---|Ветка была без названия|---


7-79494           neverbee              2001-11-20 11:07  2002.02.25  
Вывод текста поверх других окон. Как?