Database

Tags:    delphi

User
Bruger #535 @ 17.06.02 20:33
Er der ikke nogen som kan lave en step by step anvisning om hvordan man får forbindelse til en access database og henter to felter ud. Felt 1. navn Felt 2. adresse og så skal det være sådan at det kun er navnet der skal kunne ses, og så når man klikker på navnet så starter den det program som man har klikket på. Lidt indviklet men håber i forstår!



Mvh
Jesper



8 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Det virker!!!!

Men der er lige et spørgsmål mere. Jeg forstod ikke det sidste du har skrevet

[Når der klikkes på en knap el. lign. skal du hente adressen (programnavnet) ud fra accessdatabasen. Hvis du anvender en dblist- eller dbcombobox er tabellen allerede positioneret på den rigtige record og du kan så direkte hente adressen:

temp := adotable.fieldbyname('Feltnavn').AsString;

Brug shellexecute (beskrevet på andre posts i forumet, bla. "søgning i delphi") til at starte det programnavn der nu er gemt i temp. ]

Så hvis du lige gid3er at forklare det lidt bedere så ligger der 100 points til dig.

Mvh
Jesper


Det prøver jeg. Når du har valgt et navn fra comboboxen er tabellen automatisk positioneret på den valgte record, dvs. du kan med det samme hente programnavnet. I mit eksempel ovenfor har jeg defineret en variabel med navnet temp, således:

var temp : string;

Jeg henter så værdien i feltet over i temp via kommandoen:

temp := adotable1.fieldbyname('Feltnavn').AsString;

hvor feltnavn = navnet på dit felt der indeholder programnavnet.

Nu kan du så starte programmet med et kald til WINAPI-funktionen ShellExecute. ShellExecute kræver, at du tilføjer Shellapi til din uses-list:

uses ShellApi;

og så foretager følgende kald:

ShellExecute(Handle, 'open', temp, nil, nil, SW_SHOWNORMAL);


Jeg bruger temp i ovenstående eksempel, da jeg tidligere har flyttet programnavnet over i denne variabel -> temp er altså lig programnavnet og kunne være skrevet som 'c:\\programnavn.exe'.

Med venlig hilsen

Claus Fonnesbech Christensen

www.fonnesbech.com
claus@fonnesbech.com



Er der ikke nogen som kan lave en step by step anvisning om hvordan man får forbindelse til en access database og henter to felter ud. Felt 1. navn Felt 2. adresse og så skal det være sådan at det kun er navnet der skal kunne ses, og så når man klikker på navnet så starter den det program som man har klikket på. Lidt indviklet men håber i forstår!



Mvh
Jesper


For mig at se vil det være nemmest at hooke acces-databasen op på din delphiform med ADO-komponenterne. Vælg ADO-fanebladet og tilføj en ADOtable-komponent. Denne skal du konfigurere med en ConnectionString:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\MinDatabase.mdb;Persist Security Info=False

hvor c:\\MinDatabase.mdb skal erstattes af stireference og filnavn til din database.

Dernæst vælges TableName fra listen over tabeller i din Access-database og endeligt sættes Active = True. Nu kan du tilføje en standard DataSource-komponent fra DataAccess-fanebladet og sætte dennes dataset = adotabellen. Så kan datasourcen knyttes på en dblistbox el. lign. og endeligt vælges Datafield, hvorefter dine data så vil blive vist.

Når der klikkes på en knap el. lign. skal du hente adressen (programnavnet) ud fra accessdatabasen. Hvis du anvender en dblist- eller dbcombobox er tabellen allerede positioneret på den rigtige record og du kan så direkte hente adressen:

temp := adotable.fieldbyname('Feltnavn').AsString;

Brug shellexecute (beskrevet på andre posts i forumet, bla. "søgning i delphi") til at starte det programnavn der nu er gemt i temp.

Med venlig hilsen

Claus Fonnesbech Christensen

www.fonnesbech.com
claus@fonnesbech.com



User
Bruger #535 @ 19.06.02 14:15
Kanon forklaring det vil jeg sige. Jeg har næsten fået det til at virke, men jeg kan ikke få noget ind i dblistbox. Den er bare tom. Og i dbcombobox er der kun en ud at de ti som er tilføjet i databasen.

Mvh
Jesper



Kanon forklaring det vil jeg sige. Jeg har næsten fået det til at virke, men jeg kan ikke få noget ind i dblistbox. Den er bare tom. Og i dbcombobox er der kun en ud at de ti som er tilføjet i databasen.

Mvh
Jesper


Undskyld Jesper,

brug BDLookupcombobox i stedet og udfyld ListSource, ListField og KeyField men lad Datasource og Datafield være tomme. Så bør du kunne se alle posterne.

Med venlig hilsen

Claus Fonnesbech Christensen

www.fonnesbech.com
claus@fonnesbech.com



User
Bruger #535 @ 19.06.02 14:59
Det virker!!!!

Men der er lige et spørgsmål mere. Jeg forstod ikke det sidste du har skrevet

[Når der klikkes på en knap el. lign. skal du hente adressen (programnavnet) ud fra accessdatabasen. Hvis du anvender en dblist- eller dbcombobox er tabellen allerede positioneret på den rigtige record og du kan så direkte hente adressen:

temp := adotable.fieldbyname('Feltnavn').AsString;

Brug shellexecute (beskrevet på andre posts i forumet, bla. "søgning i delphi") til at starte det programnavn der nu er gemt i temp. ]

Så hvis du lige gid3er at forklare det lidt bedere så ligger der 100 points til dig.

Mvh
Jesper



User
Bruger #535 @ 19.06.02 21:16
Hvor er det helt nøjagtigt at de foreskeldige funktioner skal være henne?? Altså under var, private, publich eller andet.

Jeg er ikke helt skar til det endnu.

Mvh
Jesper



Hvor er det helt nøjagtigt at de foreskeldige funktioner skal være henne?? Altså under var, private, publich eller andet.

Jeg er ikke helt skar til det endnu.

Mvh
Jesper


Jeg vedlægger hele unit-koden så du kan se hvorledes det skal bygges op:

---------------------------------------------------------------------------------------------

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DBCtrls, Db, ADODB;

type
TForm1 = class(TForm)
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBLookupComboBox1: TDBLookupComboBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses ShellApi;


{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var temp : string;
begin
temp := adotable1.fieldbyname('Feltnavn').AsString;
ShellExecute(Handle, 'open', pchar(temp), nil, nil, SW_SHOWNORMAL);
end;

end.

-----------------------------------------------------------------------------------------

Når jeg har sat de forskellige properties på komponenterne (som du havde fået til at virke i går) er alt du mangler at tilføje en knap på din form og udfylde Click eventen som ovenfor. Husk "uses ShellApi" som vist ovenfor for at kunne anvende ShellExecute.

Med venlig hilsen

Claus Fonnesbech Christensen

www.fonnesbech.com
claus@fonnesbech.com



User
Bruger #535 @ 20.06.02 12:52
Det virker!!!!! Tak for hjælpen. :)



t