Avatar billede x-masman Nybegynder
04. august 2003 - 10:16 Der er 14 kommentarer og
1 løsning

Kald af funktion i unit1 fra unit 2

Jeg har et problem med at kalde en funktion fra en anden unit. Funktionen er deklereret i unit1 og jeg vil gerne kalde den fra unit2. Når jeg gør det siger compileren at funktionen er undeklared. Hvordan kan dette problem løses?
Avatar billede snowball Novice
04. august 2003 - 10:24 #1
Har du i uni1 lagt funktionen under Public delen og har du i unit2 lagt unit1 ind under Uses !?

Hvis du har gjort de 2 ting, så burde det bare være at skrive Unit1.Funktion

Snowball
Avatar billede x-masman Nybegynder
04. august 2003 - 10:32 #2
Ja det er også det der undre mig.

unit AnsatKar;

type

public
  function OprAns(navn : string ; adr : string ; postNr : short ; by : string ;
                telefon : longint ; mobil : longint) : short;


unit OpretAnsat;

uses
AnsatKar

AnsatKar.OprAns(Navn.text;Adresse.text;PostNr.text;By.text;Telefon.text;
                  mobil.text);

Burde dette ikke være muligt? Den siger undeclared identifier 'OprAns'
Avatar billede TRoXa Novice
04. august 2003 - 10:42 #3
det er fordi der skal stå

type

public
  function OprAns(navn : string ; adr : string ; postNr : short ; by : string ;
                telefon : longint ; mobil : longint) : short;


unit OpretAnsat;

uses
AnsatKar

function AnsatKar.OprAns(Navn.text;Adresse.text;PostNr.text;By.text;Telefon.text;
                  mobil.text);
Avatar billede snowball Novice
04. august 2003 - 11:01 #4
troxa: Øh, da ikke når han bare skal kalde funktionen !? Han skal jo ikke deklarere den igen !?

Snowball
Avatar billede TRoXa Novice
04. august 2003 - 11:06 #5
hehe .. sorry bare mig der ikke kan læse i dag :)
Avatar billede TRoXa Novice
04. august 2003 - 11:06 #6
kan du ikke smide noget sovs her x-masman ? så er det lidt nemmere at hjælpe dig
Avatar billede x-masman Nybegynder
04. august 2003 - 11:11 #7
Ja. Jeg prøvede en anden løsning... Som heller ikke virker.

Problemet er at jeg i AnsatKar har en database over ansatte. Når man så opretter en knap der åbner en ny form er der en masse editboxe. Når man indtaster i dem og trykker opret skal der laves en ny record.

unit AnsatKar //indeholder databasen

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Grids, DBGrids, Db, DBTables;

type
  TMedarbKarForm = class(TForm)
    //AnsatT: TTable;
    AnsatS: TDataSource;
    MedarbGrid: TDBGrid;
    OpretAnsat: TButton;
    procedure OpretAnsatClick(Sender: TObject);

  private
    { Private declarations }
  public
  AnsatT: TTable;
{ Public declarations }
  end;

var
  MedarbKarForm: TMedarbKarForm;

implementation

uses OpretAnsat;


{$R *.DFM}

procedure TMedarbKarForm.OpretAnsatClick(Sender: TObject);
begin
  NyAnsatForm.show;
end;

end.

unit OpretAnsat;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  AnsatKar, StdCtrls;

type
  TNyAnsatForm = class(TForm)
    Label1: TLabel;
    Navn: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Adresse: TEdit;
    PostNr: TEdit;
    By: TEdit;
    Telefon: TEdit;
    Mobil: TEdit;
    OpretAnsatAnn: TButton;
    OpretAnsatOpr: TButton;
    procedure OpretAnsatAnnClick(Sender: TObject);
    procedure OpretAnsatOprClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  NyAnsatForm: TNyAnsatForm;

implementation

{$R *.DFM}

procedure TNyAnsatForm.OpretAnsatAnnClick(Sender: TObject);
begin
  close;
end;

procedure TNyAnsatForm.OpretAnsatOprClick(Sender: TObject);
var s : string;

begin
  s := 'Der skal indtastes et navn.';
  if Navn.Text = ''
    then ShowMessage(s)
  else
  AnsatKar.AnsatT.Insert;
  AnsatKar.AnsatT['Navn'] := navn.Text;
  AnsatKar.AnsatT['Adresse'] := adresse.Text;
  AnsatKar.AnsatT['PostNr'] := postNr.Text;
  AnsatKar.AnsatT['By'] := by.Text;
  AnsatKar.AnsatT['Telefon'] := telefon.Text;
  AnsatKar.AnsatT['Mobil'] := mobil.Text;
  AnsatKar.AnsatT.post;
end;


end.

Ved denne løsning siger den at AnsatT ikke er declared.
Avatar billede TRoXa Novice
04. august 2003 - 11:23 #8
prøv at indsætte disse 3 DBGrids, Db, DBTables i din uses clauses i unit OpretAnsat
Avatar billede x-masman Nybegynder
04. august 2003 - 11:28 #9
Den siger stadig
[Error] OpretAnsat.pas(53): Undeclared identifier: 'AnsatT'
Avatar billede x-masman Nybegynder
04. august 2003 - 11:29 #10
Er det fordi jeg på en eller anden måde skal nedarve opretAnsat fra AnsatKar eller hva'?
Avatar billede x-masman Nybegynder
04. august 2003 - 11:45 #11
Er i der stadig?
Avatar billede TRoXa Novice
04. august 2003 - 11:46 #12
jeg er ved at give op .. har ikke engang delphi installeret lige nu, så kan ikke engang tjekke det :(
Avatar billede x-masman Nybegynder
04. august 2003 - 13:16 #13
hmmm.....
Avatar billede tkandersen Nybegynder
04. august 2003 - 13:33 #14
Måske lettere at få AnsatKar til at læse værdierne fra OpretAnsat?
Lav nogle public variable i OpretAnsat som du læser fra AnsatKar.OpretAnsatClick når dialogen er færdig.
Så får du i det tilfælde KUN 1 oprettet af gangen, men så har du insert og post i samme unit som ejer din ttable.
Avatar billede x-masman Nybegynder
04. august 2003 - 15:03 #15
Problemet ligger vist i at jeg referere til AnsatKar som er en unit, mens det er formen jeg skal referere til. På den måde er det AnsatKarForm.AnsatT.insert osv. der skal stå.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester