assign

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Joachim Raap
Beiträge: 143
Registriert: Mo 30. Mär 2020, 12:37

assign

Beitrag von Joachim Raap »

:shock: kann mir mal jemand sagen, warum nach dem 1:1 kopieren von einer Unit in eine Andere die Verbindung auf einmal nicht mehr klappt?
Die Bezüge (FMMenu) habe ich geändert - aber bei Abfragen bin ich nun nicht mehr "assigned"!

Code: Alles auswählen

unit bi_menu;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, SQLDB, mysql56conn, Forms, Controls, Graphics, Dialogs,
  StdCtrls, Menus;

type

  { TFMMenu }

  TFMMenu = class(TForm)
   EDTUser: TEdit;
   EDTPassw: TEdit;

   BTAnmeldung: TButton;
   BTAbbruch: TButton;
   LBLMnuMeldung: TLabel;

   LBLLogIn: TLabel;
   LBLUser: TLabel;
   LBLPassw: TLabel;

   MainMenu1: TMainMenu;
   MnuLogIn: TMenuItem;
   MnuGrp: TMenuItem;
   MnuGrpoef: TMenuItem;
   MnuGrpDr: TMenuItem;
   MnuKto: TMenuItem;
   MnuKtooef: TMenuItem;
   MnuKtoDr: TMenuItem;
   MnuEnde: TMenuItem;

   MySQL56Connection1: TMySQL56Connection;
   SQLQuery1: TSQLQuery;
   SQLTransaction1: TSQLTransaction;

   procedure MnuEndeClick(Sender: TObject);
   procedure MnuGrpoefClick(Sender: TObject);
   procedure Fehlermeldung(Code:byte);
   procedure EDTPasswEnter(Sender: TObject);
   procedure EDTUserEnter(Sender: TObject);
   procedure ConnectDB;
   procedure CloseDB;


   private

   public

  end;

var
  FMMenu: TFMMenu;
  Anmeld: boolean;

implementation

{$R *.lfm}

uses BI_Gruppen;


 procedure TFMMenu.ConnectDB;
 //Im Verzeichnis, in dem sich das Programm befindet,
 //muß die Datei "libmysql.dll" vorhanden sein
  begin
   FMMenu.MySQL56Connection1.CharSet:='utf8';
   FMMenu.MySQL56Connection1.DatabaseName:='bi';
   FMMenu.MySQL56Connection1.HostName:='localhost';       //IP = 127.0.0.1
   FMMenu.MySQL56Connection1.Password:='2227';
   FMMenu.MySQL56Connection1.Transaction:=SQLTransaction1;
   FMMenu.SQLTransaction1.DataBase:=MySQL56Connection1;
   FMMenu.MySQL56Connection1.UserName:='root';
   FMMenu.MySQL56Connection1.Connected:=true;
  end;

 procedure TFMMenu.CloseDB;
  begin
   FMMenu.SQLQuery1.ExecSQL;
   FMMenu.SQLTransaction1.Commit;
  end;



end.               

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: assign

Beitrag von theo »

Hast du vielleicht vergessen, das Formular (*.lfm) mit zu kopieren?

Übrigens sollte man innerhalb der Klasse wenn möglich nicht auf eine Instanz der eigenen Klasse zugreifen.
Ggf. kann man "Self" benutzen, aber hier nicht nötig.

Also statt:

Code: Alles auswählen

 procedure TFMMenu.CloseDB;
  begin
   FMMenu.SQLQuery1.ExecSQL;
   FMMenu.SQLTransaction1.Commit;
  end;
So:

Code: Alles auswählen

 procedure TFMMenu.CloseDB;
  begin
   SQLQuery1.ExecSQL;
   SQLTransaction1.Commit;
  end;
etc.
In ConnectDB das Gleiche.

Joachim Raap
Beiträge: 143
Registriert: Mo 30. Mär 2020, 12:37

Re: assign

Beitrag von Joachim Raap »

naja, das "alte Formular" ist im gleichen Verzeichnis und die Verbindungsmethoden sind von da ebenfalls kopiert. Die SQLdb-Symbole habe ich von dort gelöscht und auf das "neue Formular" gebracht; das reicht offensichtlich nicht???

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: assign

Beitrag von theo »

Gibt es in dem Verzeichnis ein Formular namens "bi_menu.lfm"?
Falls nicht, kopiere die "alte" Formulardatei zu einer Datei namens "bi_menu.lfm".
Falls ja, weiss ich auch nicht.

Joachim Raap
Beiträge: 143
Registriert: Mo 30. Mär 2020, 12:37

Re: assign

Beitrag von Joachim Raap »

schade sprach die Made - das Formular ist da....

Joachim Raap
Beiträge: 143
Registriert: Mo 30. Mär 2020, 12:37

Re: assign

Beitrag von Joachim Raap »

Ich habe die Unit (und das Formular) noch mal neu geschrieben; was immer der Kollege hatte, jetzt funktionierts...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: assign

Beitrag von af0815 »

Ein Formular aus pas und lfm einfach zu um zu kopieren ist generell keine gute Idee, ausser man weis wirklich über die internas von lfm Bescheid.

Eine Möglichkeit ist, das Formular mit Save As unter einem neuen Nemen abzuspeichern und die Anfragen von Lazarus alle mit Nein zu blockieren. Also keinen Änderung and den bisherigen Verlinkungen zu machen und auch das alte Formular nicht zu löschen. Dann hat man es sauber getrennt und kann es neu einsetzen. Allerdings mit den Mitteln von Lazarus noch das Formular umzubenennen, das wird mit dem Save AS nicht gemacht. Dann ist die Trennung vollzogen und es funktioniert auch.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten