Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.15;
Скачать: CL | DM;

Вниз

пытаюсь получить список таблиц *.mdb файла   Найти похожие ветки 

 
inc-viz   (2003-04-22 08:59) [0]

Пытаюсь получить названия таблиц *.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 вобще пустой.Короче говоря - в чем моя ошибка? :(


 
stone ©   (2003-04-22 09:14) [1]


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

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

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

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


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

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


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

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

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


 
stone ©   (2003-04-22 09:43) [4]


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

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


 
stone ©   (2003-04-22 09:45) [5]

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


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

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


 
stone ©   (2003-04-22 10:21) [7]

GetTableName s


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

Сделай через 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 конечно можно один раз настроить у все, просто у меня случай такой, да и все необходимые параметры видно.


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

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


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

Я через АДО сделал такс, причём работает безбалалаечно:
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:53) [11]

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


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

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


 
stone ©   (2003-04-22 11:03) [13]

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 11:52) [14]

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

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


 
stone ©   (2003-04-22 11:56) [15]

uses
DBTables


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

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

Так все и было


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

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

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


 
ЮЮ ©   (2003-04-23 04:06) [18]

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.05.15;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
6-46871
RUS1
2003-03-18 13:19
2003.05.15
Что за хрень с компонентами NMStrm и NMStrmServ


3-46645
Skalp
2003-04-24 16:12
2003.05.15
Про транзакции


8-46863
reticon
2003-02-02 20:12
2003.05.15
Функция BitBlt


4-47052
_BasiL_
2003-03-18 09:27
2003.05.15
Перехват потока открытия файлов


1-46828
damx
2003-05-03 00:42
2003.05.15
ListBox