Avatar billede blomme Nybegynder
23. september 2001 - 13:07 Der er 10 kommentarer og
1 løsning

Hjælp til filstruktur

Hej,

Jeg kunne godt bruge lidt hjælp til min filstruktur, som det er påkrævet at den kan gemmes. Programmet skal fungere som et slags menusystem hvor man kan tilføje headers, og under disse headers forskellige knapper, der skal have en given url hvis de bliver trykket på. Selve det med hvordan jeg holder styr på kontrollen med at menusystemet rent grafisk fungerer har jeg taget mig af. Det jeg mangler nu er en måde at lagre oplysningerne om de forskellige headers og underknapper og hvordan jeg gemmer dem.

Header 1
  Knap 1 (url:http://www.eksperten.dk)
  Knap 2 (url:http://.....)
Header 2
  Knap 1

Over flere gode svar vil pointene blive fordelt, men det bedste ville være hvis nogen kunne konstruere noget kode til mig (jeg bruger D6 ent.). Hvis jeg har formuleret mig uklart, sig da til :-)

- Thomas
Avatar billede angelod Novice
23. september 2001 - 13:10 #1
Durn.. Hvordan har du fået råd til D6 Ent? O.O (Er forresten lige med på en lytter her)
Avatar billede blomme Nybegynder
23. september 2001 - 13:13 #2
Ok, ok - det er D6 Std (havde lige set forkert) - men lad nu ikke diskutionen gå ud på min version af D6...
Avatar billede angelod Novice
23. september 2001 - 13:16 #3
Nej nej, jeg synes bare lige.. Jeg bruger selv D4 da jeg har den i lovlig version, men jeg kan ikke engang finde D6 Ent. i en pirat-version.. :P

Men så igen, jeg har ikke brug for den, så hey. :D
Avatar billede martinlind Nybegynder
23. september 2001 - 14:05 #4
To IB tabler med en stuktur noget i stil med dette ville være en måde :

Table1
-------------
HeaderID Int
Header Navn VarChar()

Table2
------------
KnapID Int
HeaderID Int
KnapTekst VarChar()
KnapURL VarChar()


Det giver en ret simpel master-detail struktur og funker fint til dit formål
Avatar billede martinlind Nybegynder
23. september 2001 - 14:06 #5
Kan levere en stump kode senere i dag, har ikke lige tid nu.
Avatar billede stoney Nybegynder
23. september 2001 - 14:31 #6
Du kan gemme det hele i en INI fil

procedure TForm1.addheaderClick(Sender: TObject);
var
  IniFile : TIniFile;

begin
  IniFile := TIniFile.create(ExtractFilePath(ParamStr(0))+\'headers.ini\');

  IniFile.WriteString(\'header1\',\'knap1\',\'www.eksperten.dk\');
  IniFile.WriteString(\'header1\',\'knap2\',\'www.borland.com\');
  IniFile.WriteString(\'header2\',\'knap1\',\'www.microsoft.com\');
  IniFile.WriteString(\'header2\',\'knap2\',\'www.ibm.com\');

  inifile.free
end;

procedure TForm1.showheaderClick(Sender: TObject);
var
  IniFile : TIniFile;
  S : string;
begin
IniFile := TIniFile.create(ExtractFilePath(ParamStr(0))+\'headers.ini\');
S := IniFile.readString(\'header1\',\'knap1\',\'\');

inifile.free;
showmessage(\'URL= \' + s);
end;

Stoney
Avatar billede stoney Nybegynder
23. september 2001 - 14:36 #7
Husk at tilføje inifiles i uses

Stoney
Avatar billede blomme Nybegynder
23. september 2001 - 16:52 #8
martinlind >> det lyder meget fint, hvis det kan nås til i dag - I\'m looking forward !-)
Avatar billede blomme Nybegynder
23. september 2001 - 16:53 #9
stoney >> hmmm... den metode har jeg ikke hørt om før - afprøver lige !
Avatar billede martinlind Nybegynder
23. september 2001 - 19:57 #10
Hvis du kan leve men en INI fil er stoney\'s metode helt ok, så hvis du vil ha\' IB database,  siger du lige til, så lave jeg et par rutiner, ok
Avatar billede martinlind Nybegynder
23. september 2001 - 20:58 #11
Her er lidt kode :

DPR :
-----
program Project1;

uses
  Forms,
  Unit1 in \'Unit1.pas\' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
-------------------------------------
PAS :
-----
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IBDatabase, DB, IBCustomDataSet, IBQuery, Grids, DBGrids;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    IBQuery1: TIBQuery;
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    IBQuery2: TIBQuery;
    DataSource2: TDataSource;
    DBGrid2: TDBGrid;
    IBQuery3: TIBQuery;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function GetNextID( aTableName : String ) : Integer;
    function AddHeader( aHeaderName : String ) : Integer;
    procedure AddKnap( aHeaderID, aKnapName, aKnapURL : String );
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.GetNextID(aTableName: String): Integer;
VAR
  Strx : String;
begin
  if CompareText(aTableName,\'Headers\') = 0 then Strx := \'HEADERID\'
  else Strx := \'KNAPID\';
  IBQuery3.Close;
  IBQuery3.SQL.Text := \'SELECT NextID as Max(\'+Strx+\') From \'+aTableName;
  IBQuery3.Open;
  Result := IBQuery3.FieldByName(\'NextID\').AsInteger + 1;
end;

function TForm1.AddHeader(aHeaderName: String): Integer;
begin
  Result := GetNextID(\'Headers\');
  IBQuery3.Close;
  IBQuery3.SQL.Text := Format(\'INSERT INTO HEADERS ( HEADERID, HEADERNAME ) VALUES( %d, \'\'%s\'\' )\',[Result,aHeaderName]);
  IBQuery3.ExecSQL;
end;

procedure TForm1.AddKnap(aHeaderID, aKnapName, aKnapURL: String);
VAR
  KnID : Integer;
begin
  KnID := GetNextID(\'Knapper\');
  IBQuery3.Close;
  IBQuery3.SQL.Text := Format(\'INSERT INTO KNAPPER ( KNAPID, HEADERID, KNAPNAME, KNAPURL ) VALUES( %d, %d, \'\'%s\'\', \'\'%s\'\' )\',
                              [KnID,aHeaderID,aKnapName,aKnapURL]);
  IBQuery3.ExecSQL;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  IBQuery1.Open;
  IBQuery2.Open;
end;

end.
----------------------------
DFM :
-----
object Form1: TForm1
  Left = 347
  Top = 108
  Width = 376
  Height = 412
  Caption = \'Form1\'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = \'MS Sans Serif\'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object DBGrid1: TDBGrid
    Left = 5
    Top = 5
    Width = 356
    Height = 141
    DataSource = DataSource1
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = \'MS Sans Serif\'
    TitleFont.Style = []
  end
  object DBGrid2: TDBGrid
    Left = 5
    Top = 155
    Width = 356
    Height = 186
    DataSource = DataSource2
    TabOrder = 1
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = \'MS Sans Serif\'
    TitleFont.Style = []
  end
  object DataSource1: TDataSource
    DataSet = IBQuery1
    Left = 30
    Top = 85
  end
  object IBQuery1: TIBQuery
    Database = IBDatabase1
    Transaction = IBTransaction1
    BufferChunks = 1000
    CachedUpdates = False
    SQL.Strings = (
      \'select * from HEADERS\')
    Left = 30
    Top = 50
  end
  object IBDatabase1: TIBDatabase
    DatabaseName = \'E:\\KNAPPER.GDB\'
    Params.Strings = (
      \'user_name=sysdba\'
      \'password=masterkey\')
    LoginPrompt = False
    DefaultTransaction = IBTransaction1
    IdleTimer = 0
    SQLDialect = 3
    TraceFlags = []
    Left = 65
    Top = 50
  end
  object IBTransaction1: TIBTransaction
    Active = False
    DefaultDatabase = IBDatabase1
    AutoStopAction = saNone
    Left = 100
    Top = 50
  end
  object IBQuery2: TIBQuery
    Database = IBDatabase1
    Transaction = IBTransaction1
    BufferChunks = 1000
    CachedUpdates = False
    DataSource = DataSource1
    SQL.Strings = (
      \'select * from KNAPPER WHERE HEADERID = :HEADERID\')
    Left = 70
    Top = 205
    ParamData = <
      item
        DataType = ftUnknown
        Name = \'HEADERID\'
        ParamType = ptUnknown
      end>
  end
  object DataSource2: TDataSource
    DataSet = IBQuery2
    Left = 35
    Top = 205
  end
  object IBQuery3: TIBQuery
    Database = IBDatabase1
    Transaction = IBTransaction1
    BufferChunks = 1000
    CachedUpdates = False
    Left = 140
    Top = 50
  end
end
-----------------------------

Håber det kan bruges


/Martin
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