Автор Тема: Делфи(opendialog,listbox)  (Прочитано 2650 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Астасья

  • Постоялец
  • ***
  • Сообщений: 173
    • Просмотр профиля
Делфи(opendialog,listbox)
« : 08 Мая 2012, 22:45:58 »
Организовать выбор файла(базы данных) с расширением mdl через TOpenDialog,так чтобы её структура-список таблиц и полей по каждой табл должны отражаться в Tlistbox

На счёт расширения не получается совсем и вообще программа не работает....подскажите



uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    ADOConnection1: TADOConnection;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var list1,list2:Tstrings;
i,j:integer;
begin
if OpenDialog1.Execute then
begin
 adoconnection1.Connected:=true;
  adoconnection1.gettablenames(list1,false);
  list1:=Tstringlist.Create;
  list2:=Tstringlist.Create;
  listbox1.items.Clear;
  for i:=0 to list1.Count-1 do
  begin
  listbox1.items.add(list1.strings);
  adoconnection1.getfieldnames(list1.strings,list2);
    for j:= 0 to list2.Count-1 do
   listbox1.items.Add('   '+list2.strings[j]);
  end;
  list1.Free;
   list2.Free;
end;
end;

end.

Оффлайн ki

  • Ветеран
  • *****
  • Сообщений: 668
    • Просмотр профиля
Re: Делфи(opendialog,listbox)
« Ответ #1 : 10 Мая 2012, 13:50:29 »
с ADO не работал, но...во первых...настройте фильтр opendialog на отображение файлов с расширением mdl. Затем переменную из opendialog.filename, подозреваю, нужно привязать  к adoconnection (путь к базе)...
Цитировать
  adoconnection1.gettablenames(list1,false);
Вы используете функцию, но переменная list1 еще не инициализирована...

Попробуйте сперва подумать над этим, а потом будем думать еще)

PS. возможно я неправ...

Оффлайн Астасья

  • Постоялец
  • ***
  • Сообщений: 173
    • Просмотр профиля
Re: Делфи(opendialog,listbox)
« Ответ #2 : 10 Мая 2012, 14:20:34 »
Я нашла ,что расширение можно настроить через свойство Filter...
На счёт
Цитировать
Затем переменную из opendialog.filename, подозреваю, нужно привязать  к adoconnection (путь к базе)...
это так  adoconnection (opendialog.filename)???

Оффлайн ki

  • Ветеран
  • *****
  • Сообщений: 668
    • Просмотр профиля
Re: Делфи(opendialog,listbox)
« Ответ #3 : 10 Мая 2012, 15:10:08 »
adoconnection, параметр connectionstring...или у Вас он жестко забит? тогда зачем opendialog?

я так понимаю, что через opendialog выбирается файл базы, затем идет инициализация переменных и базы, парсятся заголовки таблиц и выводятся в два списика
только вот список таблиц не меняется, а список полей должен меняться от выбранной таблицы, так?

Оффлайн Астасья

  • Постоялец
  • ***
  • Сообщений: 173
    • Просмотр профиля
Re: Делфи(opendialog,listbox)
« Ответ #4 : 10 Мая 2012, 18:51:04 »
Вы всё правильно поняли...
тогда так  adoconnection.connectionstring:=opendialog.filename???....но тогда пишет ошибку про то что имя слишком длинное :(
« Последнее редактирование: 10 Мая 2012, 18:55:40 от Астасья »

Оффлайн Астасья

  • Постоялец
  • ***
  • Сообщений: 173
    • Просмотр профиля
Re: Делфи(opendialog,listbox)
« Ответ #5 : 10 Мая 2012, 19:11:51 »
У меня всё получилось...ВОТ!!!!! :)
procedure TForm1.Button1Click(Sender: TObject);
var list1,list2:Tstrings;
i,j,k:integer;
begin
if OpenDialog1.Execute then
begin
 adoconnection1.connectionstring:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+opendialog1.filename;
  list1:=Tstringlist.Create;
  list2:=Tstringlist.Create;
  adoconnection1.gettablenames(list1,false);
  listbox1.items.Clear;
  k:=0;
  for i:=0 to list1.Count-1 do
  begin
  listbox1.items.add(list1.strings);
  adoconnection1.getfieldnames(list1.strings,list2);
    for j:=k to list2.Count-1 do
       begin
        listbox1.items.Add('   '+list2.strings[j]);
        k:=k+1;
       end;
  end;
  list1.Free;
  list2.Free;
end;
end;

end.

Оффлайн ki

  • Ветеран
  • *****
  • Сообщений: 668
    • Просмотр профиля
Re: Делфи(opendialog,listbox)
« Ответ #6 : 11 Мая 2012, 12:23:35 »
Молодца :)

 

Программа в делфи. Вычислить определенный интеграл методом трапеции

Автор Мозг

Ответов: 0
Просмотров: 6514
Последний ответ 15 Сентября 2010, 21:06:25
от Мозг
Сортировка двумерного массива по возрастанию, делфи

Автор Asira

Ответов: 1
Просмотров: 6264
Последний ответ 30 Апреля 2010, 01:39:45
от InfStudent
ДЕЛФИ, ВЕКТОРА

Автор Эля_informatichka

Ответов: 1
Просмотров: 3261
Последний ответ 06 Октября 2010, 21:40:20
от InfStudent
Делфи (edit)

Автор Астасья

Ответов: 0
Просмотров: 1781
Последний ответ 08 Мая 2012, 23:16:01
от Астасья
Делфи(строки)

Автор Астасья

Ответов: 13
Просмотров: 4013
Последний ответ 14 Мая 2012, 15:08:22
от ki