Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > из mdb в Excel


Автор: RustreX 22.5.2008, 19:16
Вообщем такая проблема: Мне нужно заполнить ComboBox находящийся на UserForm значениями находящиеся в базе данных *.mdb.
как не ковырялся - не получается... Помогите пожалуйста
 
Код

Private Sub ComboBox1_Change()
Dim dbAccess As Database
Dim reRecordSet As Recordset
Dim stSQL As String
On Error GoTo ErrorsDB
Set dbAccess = OpenDatabase(Name:=ThisWorkbook.Path & "\gamedb.mdb")
stSQL = "SELECT name, g_key FROM prodag, game WHERE g_key=key_g "
Set reRecordSet = dbAccess.OpenRecordset(stSQL)
If (reRecordSet.RecordCount > 0) Then
reRecordSet.MoveFirst
Do While Not reRecordSet.EOF
Name = reRecordSet!Name
Sheets(1).ComboBox1.AddItem Name
reRecordSet.MoveNext
Loop
Else
MsgBox "Not Found"
End If
reRecordSet.Close
dbAccess.Close
GoTo Ends
ErrorsDB:
MsgBox "Error"
Ends:
End Sub

структура базы данных

Автор: bopoha 22.5.2008, 19:40
Что именно не получается? Ошибка?

Автор: RustreX 22.5.2008, 19:45
Цитата(bopoha @ 22.5.2008,  19:40)
Что именно не получается? Ошибка?

не получается загнать список в combobox....
Ошибки никакой не вылетает...
Вообщем: Я пытаюсь заполнить ComboBox записями поля G_KEY (поле подстановки, которое берет свои значения из поля NAME таблицы GAME) из таблицы PRODAG.

Прикрепил файл с базой. Там вкладка Продажи - кнопка Редактирвоание - на ней самый первый Combobox1. ВОт его у меня и не получается заполнить =(

Автор: Akina 23.5.2008, 00:06
Начните с того, что НАВСЕГДА избавьтесь от привычки давать полям, переменным, таблицам и прочим объектам имена, входящие в список резервированных слов. В данном конкретном случае имеется в виду Name.

А когда поправите - выполните код в пошаговом режиме и найдите момент, когда поведение кода и содержимое переменных отличаются от желаемого.

Автор: Alex1984 23.5.2008, 01:50
Код

  


   ExcelApp.ConnectKind := ckRunningOrNew;
   ExcelApp.Connect;
   ExcelApp.Visible[1049] := true;
   ExcelApp.Workbooks.Add (EmptyParam,1);
   ExcelWb.ConnectTo (ExcelApp.ActiveWorkbook );
   ExcelWS.ConnectTo (ExcelWb.Worksheets [1] as _WorkSheet);




procedure TForm1.bbOpenDBClick(Sender: TObject);
begin
if od.Execute then
begin
try
   ADO_CON.Connected:=false;
   ADO_CON.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+od.FileName+';Persist Security Info=False';
   ADO_CON.Connected:=true;
   edtBASA.Text:=od.FileName;
finally
end;
end;
end;

procedure TForm1.bbExcelClick(Sender: TObject);
var
 from_m,to_m:integer;
 year_from:integer;
 year_to:integer;
 s:string;
begin
If TRIM(edtBASA.Text)='' then
showmessage('Áàçó âûáåðè...')
ELSE
BEGIN
try
    l:=TstringList.Create;
    qryADO.Active:=false;
    from_m:=cmMon.ItemIndex+1;
    to_m:=cmMon.ItemIndex+2;
    year_from:=strtoint(edtYear.Text);
    year_to:=strtoint(edtYear.Text);
    if to_m=13 then
    begin
      to_m:=1;
      year_to:=year_to+1;
    end;
    qryAdo.Parameters.ParamByName('PFROM').Value:=EncodeDate(Year_from,from_m,1);
    qryAdo.Parameters.ParamByName('PTO').Value:=EncodeDate(Year_TO,TO_m,1);
//    showmessage(qryADO.SQL.Text);
    try
      qryADO.Active:=true;
      qryADO.First;
      while not qryADO.Eof do
      begin
      s:='';
      s:=formatdatetime('dd.mm.yyyy',qryADO.fieldbyname('DEVENT_DATE').AsDateTime)+';';
      s:=s+formatdatetime('hh:nn',qryADO.fieldbyname('DEVENT_TIME').AsDateTime)+';';
      s:=s+qryADO.fieldbyname('TCARD').AsString+';';
      s:=s+qryADO.fields[3].AsString+';';
      s:=s+qryADO.fieldbyname('TDEPARTMENTNAME').AsString+';';
      s:=s+qryADO.fieldbyname('tDescReader').AsString;
      l.Add(s);
         qryADO.Next;
      end;
      l.SaveToFile('1.csv');
    TO_EXCEL(l);
    except
       showmessage('×åòî íå òî ñ SQLåì...')
    end;
    qryADO.Active:=false;
    ADO_con.Connected:=false;
    ADO_con.Connected:=true;
finally
    l.Clear;
    l.Free;
    l:=nil;
 end;
END;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ADO_CON.Connected:=false;
end;

Еще почитай статейку http://forum.vingrad.ru/forum/topic-84634/anchor-entry650732/0.html
у меня после этого вопросы просто отпали.
Как данные вытягивать, так это просто: Делаешь SQL запрос на выборку данных.
Если не знаешь, то открываешь Access, далаешь запрос, а потом просто переходишь к виду SQL. Вот тебе и выборка SQLем, кинул тебе рабочий код. Дописываю форму в экселе при выведении сейчас

Добавлено через 1 минуту и 18 секунд
Забыл написать
Microsoft.Jet.OLEDB.4.0
это виндовый обработчик базы данных, поищи его описание, а оттуда найдешь как данные тянуть)))))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)