funktion automatisch starten

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
ac
Beiträge: 19
Registriert: Mi 25. Okt 2006, 09:54

funktion automatisch starten

Beitrag von ac »

hallo,
ich bins wieder und wieder brauche ich eure hilfe.

ich möchte, dass beim start meiner applikation sofort eine funktion ausgeführt wird. habe schon mit formcreate, initialize u.ä. rumexperimentiert, aber bislang passiert entweder garnix oder das programm stürzt ab.

hier weiß doch sicher jemand wie das geht.

danke und grüße, ac

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wenn du sagst worums überhaupt geht und die notwendigen angaben machst kann man dir sicher auch helfen.

Regulär kannst du es in Formcreate machen. Oder in der lpr oder in der initialization einer unit oder so. Aber es kommt natürlich drauf an was du in dieser Funktion machst wie gesagt ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

ac
Beiträge: 19
Registriert: Mi 25. Okt 2006, 09:54

Beitrag von ac »

ich schriebe gerade an einem programm dass mit datenbanken arbeitet, genauer tabellen kopiert.(mit hilfe von zeos) das programm soll starten und dann vollkommen selbstständig, ohne dass der benutzer einen knopf drück bestimmte tabellen kopieren. deshalb will ich dirket beim starten die einzelnen prozeduren aufrufen.

ich post einfach mal den code (ist zwar noch recht fehlerhaft und noch nicht vollständig aber vll könnt ihr ja etwas damit anfangen:

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
  ZConnection, ZDataset, DB, DBCtrls, Buttons;
 
type
  TCopyDataBase = class(TForm)
    Button1: TButton;
    DBMemo1: TDBMemo;
    ZConnection1: TZConnection; 
    ZQuery1: TZQuery;           
    Datasource1: TDatasource;   
    ZConnection2: TZConnection; 
    ZQuery2: TZQuery;           
    Datasource2: TDatasource;   
    ColumnList : TStringList;
 
  procedure Button1Click(Sender: TObject);
    procedure SetConnection;
    procedure GetColumns;
    procedure CopyTable;
  end;
 
var
  CopyDataBase: TCopyDataBase;
 
implementation
procedure TCopyDataBase.Button1Click(Sender: TObject);
begin
   SetConnection;
   GetColumns;
   CopyTable;
end;
 
procedure TCopyDataBase.SetConnection;
begin
   ZConnection1.Hostname := '192.168.139';
   ZConnection1.Port := 3306;
   ZConnection1.Database := 'testdb1';
   ZConnection1.Protocol := 'mssql';
   ZConnection1.User := 'muh';
   ZConnection1.Password := 'muh';
   ZConnection1.Connected := True;
   ZQuery1.Connection := ZConnection1;
   Datasource1.DataSet := ZQuery1;
 
   ZConnection2.Hostname := '192.168.139';
   ZConnection2.Port := 3306;
   ZConnection2.Database := 'testdb2';
   ZConnection2.Protocol := 'mysql-5';
   ZConnection2.User := 'bla';
   ZConnection2.Password := 'bla';
   ZConnection2.Connected := True;
   ZQuery2.Connection := ZConnection2;
   Datasource2.DataSet := ZQuery2;
end;
 
procedure TCopyDataBase.GetColumns;
begin
   ColumnList := TStringList.Create;
   ColumnList.add('id');
   ColumnList.add('newsdate');
   ColumnList.add('newsheading1');
   ColumnList.add('newsheading2');
  ColumnList.add('newstext');
   ColumnList.add('newsimage');
   ColumnList.add('newslink');
   ColumnList.add('newslinkname');
   ColumnList.add('newslinkexternal');
   ColumnList.add('regionid');
   ColumnList.add('visible');
   ColumnList.add('visibleonindex');
end;
 
procedure TCopyDataBase.CopyTable;
var
   ZeileAsInt : integer;
   ZeileAsString: string;
   ColumnListPos :integer;
   Tabelle : string;
begin
   Tabelle := 'ContentNews';
   ZeileAsInt := 0;
   while(ZeileAsInt <= ColumnList.Count) do
   begin
      inc(ZeileAsInt);
      Str(ZeileAsInt, ZeileAsString);
      ColumnListPos := 0;
      while (ColumnListPos < ColumnList.Count) do
      begin
         ZQuery1.SQL.clear;
         ZQuery1.SQL.add('SELECT '+ColumnList.ValueFromIndex[ColumnListPos]+' FROM '+Tabelle+' WHERE ID='+ZeileAsString+';');
         zQuery1.Active := True;
         inc(ColumnListPos);
      end;
   end;
end;
 
initialization
  {$I unit1.lrs}
 
end.


das was button1click macht, soll alles dirket bei programmstart gemacht werden. jemand eine idee?

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

also entschuldige, aer das sollte eigentlich schon gehen ;).

Einfach die Form markieren, im OI bei den Ereignissen das FormCreate auswählen und auf den kleinen Knopf mit '...' daneben klicken (Doppelklick ins Feld sollte auch gehen) und die Befehle in den entsprechenden, autoomatisch erstellten Funktionsrumpf einfügen. Und schon werden die Befehle bei Programstart, genau bei der erstellung des Formulars, ausgeführt.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

ALso in der initialization geht des natürlich nicht, aber in formcreate solltes keine probleme geben. Wenn da nichts passiert ist irgendwas falsch eingetragen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

ac
Beiträge: 19
Registriert: Mi 25. Okt 2006, 09:54

Beitrag von ac »

ich habe das nun nochmal ausprobiert:

Code: Alles auswählen

procedure TCopyDataBase.FormCreate(Sender: TObject);
begin
   SetConnection;
   GetColumns;
   CopyTable;
end;


ich habe in die drei prozeduren zur kontrolle ein paar showmessage() reingeschrieben. die werden auch angezeigt, allerdings die form an sich nicht.

kann es sein, dass ich bei FormCreate noch weitere angaben machen muss ?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

FormCreate wird wie der mane schon sagt ausgeführt wenn die Form erstellt wird demzufolge kann sie zu diesem Zeitpunkt nicht angezeigt werden.
Nachdem deine 3 proceduren ausgeführt wurden wird auch die form angezeigt. Ansonsten kannst du onShow nehmen das wird ausgeführt sobald die form sichtbar gemacht wurde allerdings auch jedesmal wenn sie sichtbar wird.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten