Показать сообщение отдельно
  #7  
Старый 23.09.2013, 13:41
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Цитата:
Сообщение от Freeman
Похоже, автор плохо усвоил предыдущий урок. Я уже начинаю разочаровываться.

С ошибками разбирался всю ночь. По поводу MainForm выяснил.
Что касается обработки информации в OnCreate главной формы:

Есть нюанс, что при загрузке данных используются и другие формы. Например выгрузка настроек из IniFil'a в форму fSettings. Т.е. её тоже нужно создать перед тем, как в неё выгружать информацию.

Итоговый код:
Код:
program WorkPlace;

uses uMain in 'uMain.pas' {fMain}; // все unit'ы
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfMain, fMain);
  Application.CreateForm(TfDM, fDM);
  Application.CreateForm(TfNewTicket, fNewTicket);
  Application.CreateForm(TfCheckClient, fCheckClient);
  Application.CreateForm(TfSettings, fSettings);
  Application.CreateForm(TfTicketInfo, fTicketInfo);
  Application.CreateForm(TfNewClient, fNewClient);
  Application.CreateForm(TfReport, fReport);

  fSynch := TfSynch.Create(Application);
  fSynch.Show;
  fSynch.LoadData; // функция по примеру, который предложил NumLock
  fSynch.Free;
  Application.Run;

end.
Функция Load:
Код:
procedure TfSynch.LoadData;
var
  IniF: TIniFile;
begin
  IniF := TIniFile.Create(ExtractFilePath(Application.Exename) +
    '/Settings.ini');
  with fSettings do
  begin
    gPawnshop.Text := IniF.ReadString('General', 'Pawnshop', '');
    gNum.Text := IntToStr(StrToInt('$' + IniF.ReadString('General', 'N', '')));
    gNumM.Text := IntToStr(StrToInt('$' + IniF.ReadString('General',
      'NM', '')));
    // Connection
    sDriver.Text := IniF.ReadString('Connection', 'Driver', '');
    sServer.Text := IniF.ReadString('Connection', 'Server', '');
    sPort.Text := IniF.ReadString('Connection', 'Port', '');
    sUid.Text := IniF.ReadString('Connection', 'Uid', '');
  end;
  IniF.Free;

  fDM.GlobalConn.ConnectionString := 'Driver=' + fSettings.sDriver.Text + ';' +
    'Server=' + fSettings.sServer.Text + ';' + 'Port=' + fSettings.sPort.Text +
    ';' + 'UID=' + fSettings.sUid.Text + ';' +
    'Database=gobseck;PWD=ХАРДКОЖЕНЫЙПАРОЛЬ;';

  fSynch.pSynch.Properties.Text := 'Подключение к серверу: ' +
    fSettings.sServer.Text + '. Пожалуйста, ждите...';
  Application.ProcessMessages;
  try
    fDM.GlobalConn.Connected := true;
  except
    while fDM.GlobalConn.DataSetCount <> 0 do
      fDM.GlobalConn.DataSets[0].Connection := fDM.LocalConn;
    fDM.LocalConn.Connected := true;
  end;
end;

Процедуры AfterConnect для Global И Local connection идентичны (с точностью до имён):

Код:
procedure TfDM.GlobalConnAfterConnect(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to fDM.GlobalConn.DataSetCount - 1 do
  begin
    fSynch.pSynch.Properties.Text := 'Загрузка: ' +
      fDM.GlobalConn.DataSets[i].Name;
    fSynch.pSynch.Update;
    fDM.GlobalConn.DataSets[i].Open;
    fSynch.pSynch.Position := fSynch.pSynch.Position +
      100 / fDM.GlobalConn.DataSetCount;
    fSynch.pSynch.Update;
  end;
end;
Здесь много граблей. Хотелось бы исправить. Особенно "пароль",который жёстко вшит в код программы =\
Ответить с цитированием