Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

пытаюсь получить список таблиц *.mdb файла [access]


inc-viz ©   (2003-04-22 08:59:00) 

Пытаюсь получить названия таблиц *.mdb файла через компонент
TSession. На форме компонент, 2 листвокса и кнопка:



procedure TForm1.Button1Click(Sender: TObject);
begin


MyStringList := TStringList.Create;


try


MySession2.GetDatabaseNames(MyStringList);
ListBox1.Items := MyStringList;


MySession2.GetTableNames("d:\Temp\acc\","",false,false,MyStringList);
ListBox2.Items := MyStringList;

finally
MyStringList.Free;

end;

end;



При запуске в listbox1 вместо названия баз пишутся названия алиасов,
а listbox2 вобще пустой.Короче говоря - в чем моя ошибка? :(


ЮЮ   (2003-04-23 04:06:00) [1]

в D6 в компонентах DataAccess остался только TDataSourse, так что нельзя :-)

>Но мне нужно чтобы мое приложение могло работать без вряких наворотов типа ADO...чтобы не ставить их потом вместе с программой как дополнение.

А БДЕ уже можно не ставить? :-) А остальные компоненты перекочевали на закладку BDE


inc-viz   (2003-04-23 01:39:00) [2]

Понял в чем проблема.Попробовал в 6-м делфи и там действительно есть GetTableNames .Просто компонент database у D5 и D6 разных версий.
Придется ставить 6-ую делфю..

Но вот всетаки интересно, можно ли получить этот несчастный список таблиц в Д5, используя компоненты DataAccess?


inc-viz   (2003-04-22 22:26:00) [3]

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DBTables, Db;

Так все и было


stone   (2003-04-22 11:56:00) [4]

uses
DBTables


inc-viz   (2003-04-22 11:52:00) [5]

Да, так и пишу Database1.GetTableNames(ListBox1.Items, False);
а мне вылезает Undeclared identifier: "GetTableNames"
Могу скриншот сделать, если есть необходимость, но сам факт - не работает.

У в help для Tdatabse : GetNamePath и GetParentComponent больше нету. Делфи 5 -ый.


stone   (2003-04-22 11:03:00) [6]

F1 тебе поможет.

Populates a string list with the names of tables in the database.

Delphi syntax:

procedure GetTableNames(List: TStrings; SystemTables: Boolean = False);

Description

Call GetTableNames to retrieve a list of tables in the associated database.

List is a TStrings descendant that receives the table names. Any existing strings are deleted from the list before GetTableNames adds the names of all tables in the database.

SystemTables specifies whether the list of table names should include only the database’s system tables. If SystemTables is true, only the system tables are added to List. If SystemTables is false, the list is filled with ordinary tables.

For example, the following line fills a list box with the names of all tables in the database:

Database1.GetTableNames(ListBox1.Items, False);


inc-viz   (2003-04-22 10:57:00) [7]

To stone:Undeclared identifier: "GetTableNames". - я и так пробовал.


inc-viz   (2003-04-22 10:53:00) [8]

Блин, через Адо любой дурак сможет..
А компанентами DataAccess слабо??


KDS   (2003-04-22 10:38:00) [9]

Я через АДО сделал такс, причём работает безбалалаечно:
var tbList: TStringList;
try
tbList:=TStringList.Create;
ADOConnection1.GetTableNames(tbList);
cbxTables.Items.Assign(tbList);
finally
tbList.Free;
end;
cbxTables.ItemIndex:=0;

где cbxTables: TComboBox
ADOConnection1 надо настроить на свою МДБ


inc-viz   (2003-04-22 10:36:00) [10]

Через ADO у меня проблем не возникает:) Но мне нужно чтобы мое приложение могло работать без вряких наворотов типа ADO...чтобы не ставить их потом вместе с программой как дополнение.


viman   (2003-04-22 10:28:00) [11]

Сделай через ADO, у меня все работает
ListBox1.Items.Clear;
ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0;"+"Data Source="+apl_path+filename+".mdb;Mode=Share Deny Read|Share Deny Write;Persist Security Info=False";
ADOConnection1.Connected:=true;
ADOConnection1.GetTableNames(ListBox1.items);

ConnectionString конечно можно один раз настроить у все, просто у меня случай такой, да и все необходимые параметры видно.


stone   (2003-04-22 10:21:00) [12]

GetTableName s


inc-viz   (2003-04-22 10:10:00) [13]

попробовал и меня обругали строкой: Undeclared identifier: "GetTableName".


stone   (2003-04-22 09:45:00) [14]

Извиняюсь, для TDatabase немного по-другому
Database1.GetTableNames(ListBox2.Items; False);


stone   (2003-04-22 09:43:00) [15]


> Можно тогда, конечно, попробовать динамически для него создать,
> а потом удалить..

В этом нет нужды. Раз уж ты используешь БДЕ (я не ошибся?), используй TDatabase для подключения к твоей БД. Список таблиц в этом случае ты сможешь получить так:
Database1.GetTableNames(YourDatabaseName,"",false,false,ListBox2.Items);


inc-viz   (2003-04-22 09:42:00) [16]

Попробовал так:
PrivateDir у Mysession: D:\TEMP\ACC\PDNEW.MDB
И в win 98 в listbox1 пишутся имена таблиц из файла PDNEW.mdb
Проблемы возникают, когда я пытаюсь проделать то же самое в XP

Причем попытался в win98 откомпилировать программу и на той же машине проверил файл - работает. А у меня в Xp тот самый откомпилированный фаил при запуске выдает список алиасов:(


inc-viz   (2003-04-22 09:31:00) [17]

Дык ведь..это..у меня mdb файл просто так валяется без алиаса...
Можно тогда, конечно, попробовать динамически для него создать, а потом удалить..
Так и попробую;)


stone   (2003-04-22 09:14:00) [18]


> listbox1 вместо названия баз пишутся названия алиасов

Все правильно, алиас - это псевдоним БД

> а listbox2 вобще пустой

MySession2.GetTableNames(ListBox1.Items.Strings[ListBox1.ItemIndex],"",false,false,ListBox2.Items);


Наверх

Титульная страница Поиск, карта сайта Написать письмо