Avatar billede exp-ralle Nybegynder
06. juli 2003 - 16:57 Der er 32 kommentarer

Hjælp til database i Delphi

Hej...

Jeg står og skal lave et trænings program i Delphi og har derfor brug for at kunne gemme hver "trænings" data i en database så de ikke går tabt når man lukker programmet.. Hvordan laver jeg noget med en database har nemlig ikke prøvet det før i Delphi... det skal være en database som folk ikke selv skal have kørende (fx. MySQL) på computeren for at de kan bruge programmet...

Håber i kan hjælpe..


Rasmus
Avatar billede koden12 Nybegynder
06. juli 2003 - 17:22 #1
MySql høre til databaser over www og skrives i PHP kode.
Så det er ikke Delphi ?
Men jeg er også ny her så måske skal du vente med nogle flere svar.
Er det en database over www du tænker på?
Det er nemlig MySql som er Åben sovs kode og gratis.
VH
sprøgeJørgen
Avatar billede kustoden Nybegynder
06. juli 2003 - 17:24 #2
Hvis du har enten et ADO-interface eller en ODBC-driver til din database er det rimelig enkelt i Delphi.

Du smider en TADOConnection hhv. TTable eller TQuery på en form eller create'er dem selv, når du skal bruge dem. (De er at finde i VCL'et)

ADO-interfacet giver sig selv, med de komponenter, Borland har været så venlige at forsyne dig med.

ODBC er lidt mere omstændigt, men ikke meget.

Der skal du lave en ODBC connection, og den vil du kunne referere til vha. BDE, som du også har.

Hvis du vil have et eksempel på det ene eller det andet, må du bare sige til.


Hvis du har arbejdet med databaser før, er det overhovedet ikke noget problem (igen givet, at du har enten et ADO-interface eller en ODBC-driver.
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 17:53 #3
Ok.. det skal ikke være en www database... bare til programmet.

kustoden, Hvad er et ADO-interface? Og hvor finder jeg det og eller en ODBC driver? Problemet er også at jeg ikke ved hvilken database jeg skal vælge... hvilken vil du sige er bedst til Delphi?

Rasmus
Avatar billede devdude Nybegynder
06. juli 2003 - 18:34 #4
Hej Rasmus.

Det er meget simpelt.

Det du har brug for er Kim Bo Madsens kbmMemTable. Det er en TTable-lignende komponent som arbejder i computerens hukommelse, og som kan bruges som datasource i dit Delphi program på linie med ADO-connections, BDE TTables og andre.

Når programmet startes, hentes alle data fra en fil. Programmet arbejder så med disse data i memory, og når programmet lukkes (eller når du har lyst) gemmer du så alle data i filen igen.

Hent kbmMemTable komponenten på http://www.components4programmers.com/products/kbmmemtable/download.htm

Der følger også en demo med.

DevDude
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 19:10 #5
devdude, hmm... hvorfor er det smart at den arbejder med dataene i memory, hvordan gør de andre komponenter da?

Kan ikke få det til at virke så jeg må bruge noget andet... men stadig er noget af det vigtigste:

Hvilken Database skal jeg bruge???? Der skal ikke være helt vildt mange data...
Avatar billede kustoden Nybegynder
06. juli 2003 - 19:18 #6
Du kunne bruge en Access, Paradox, InterBase v.6 (OpenSource), hvis du vil have et rigtigt RDBMS o.s.v.

De tre nævnte er det temmelig let at bruge fra Delphi.

Interbase og Paradox er reelt native Delphi, men Interbase leverer også en ODBC ting, og Access kan du tilgå med både ADO og ODBC.
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 19:24 #7
kustoden, Hvad betyder native Delphi?

Du skriver at InterBase er opensource men når jeg kigger på www.interbase.com (har nemlig kigget på den) så skal man da købe det.. og ellers, hvor finder jeg drivere til Paradox, Interbase og evt. Access henne? Gerne til dbXpress eller hvad?
Avatar billede devdude Nybegynder
06. juli 2003 - 19:48 #8
Hej Ralle.

Jeg arbejder til dagligt med Paradox, Access, InterBase, MS SQL Server og andre, så jeg kender disse ud og ind. Jeg vil stadig mene at den simpleste løsning for dig er kbmMemTable.

Hvis du absolut vil benytte en "rigtig" database, er der en del forhindringer, du skal tage højde for. F.eks:
- Paradox kræver at Borland Database Engine er installeret på computeren.
- InterBase kræver at InterBase serveren er installeret på computeren, og kræver at du har Delphi Professional eller Delphi Enterprise.

Et tidligere svar i tråden her nævner ADO, og en Microsoft Access database med ADO connection er nok det bedste bud i din situation, hvis du vil bruge en rigtig database.

DevDude
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 19:59 #9
devdude, okay men kan du hjælpe mig med at få det til at virke med en access og en ADO connection? evt. et lille eksempel ville være fedt for jeg roder med det nu og jeg kan sq ikke finde ud af det :/
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 20:07 #10
Sidder forresten og leger med noget MySQL db i Delphi lige nu... (self. ikke det jeg skal bruge da man så skal have MySQL installeret) og jeg har fået det nogenlunde til at virke ved at den viser data i et DBGrid... nu vil jeg så bare vise det på en anden måde (bare en test så jeg bruger en RichEdit) men jeg kan kun få fat i Kolonne navnene og så dataene i den FØRSTE række... hvordan for jeg resten evt. med en løkke... ?

Og så hvis nogen kunne hjælpe med en Access database og noget ADO connection ville det være fedt :D
Avatar billede devdude Nybegynder
06. juli 2003 - 20:20 #11
Hej Ralle

Access database og ADO kræver at du har Microsoft Access installeret, da du skal create databasen herfra. Det gælder forøvrigt også for alle andre databaser.

Har du Access og har du lavet den database du skal bruge til din applikation. Ellers glem Access.

DevDude
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 20:30 #12
Ja jeg har Access.. jeg skal bare bruge en Driver til Delphi... og så hvis du kan forklare hvordan jeg connecter og hiver dataene ud / skriver nye data fra Delphi ville det bare være kanont :D

Laver lige en lille test Access database!
Avatar billede kustoden Nybegynder
06. juli 2003 - 20:33 #13
DevDude.
Det er ikke helt korrekt, at man skal have installeret Access - kaldte du den en database? :-)  for at kunne bruge den.

Man kan via BDE (SQL Explorer eller sit eget lille program), oprette en Access-ting og derefter tilgå den via ADO, hvis det er det, man vil.
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 20:36 #14
Hvad er dBASE forresten? For jeg har et lille program (har ikke selv lavet det har firmaet Polar) liggende hvor databasen er en .dbf fil som tilsyneladdende er en dBASE database... ??
Avatar billede kustoden Nybegynder
06. juli 2003 - 20:37 #15
Sorry, nej det kan man åbenbart ikke med Access. Tilsyneladende kun med PDox, DBase osv.
Avatar billede koden12 Nybegynder
06. juli 2003 - 20:40 #16
Det nok ikke klogt at blande sig mellem så store hjerner, men jeg prøver alligevel.
ADO krover ikke Access så vit jeg ved.
Det kan laves uden.
Kode :
Provider=Microsoft.Jet.OLEDB4.0;
Data Source :C:\Program Files\Common files\Borland Shared\data\DBDemos.mdb;

ShowMassage(ADOTable1.Properties[1].Value;

eller sådan noget ligende.

VH
Spørgerjørgen.
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 20:59 #17
Ok... men hvilke komponenter skal jeg bruge? ADOConnection og ADOTable bare?
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 21:00 #18
Kan heller ikke bruge det for den vil ikke "logge ind" hvad er mit brugernavn og kodeord til den login prompt? Plejer da aldrig at være user og password på en Access db?!?!
Avatar billede devdude Nybegynder
06. juli 2003 - 21:04 #19
Hej igen

Problemet er at "create" din database fra starten. Det kan kun gøres fra Access. Derefter kræves der IKKE at Access skal være installeret på computeren for at din applikation kan køre.

Hvis du har created din database i Access er du næsten ved vejs ende.

Knald en ADOConnection på en form, vælg "Microsoft.Jet.OLEDB.4.0" som "Provider" og vælg din database i "Default database"

Jeg har lige lavet et fungerende eksempel på en databaseapplikation baseret på kbmMemTable med absolut nul linier kode. Den kan jeg sende til dig hvis du har lyst til at se den.

DevDude
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 21:11 #20
devdude, ok nu har jeg smidt en ADOConnection på min form og valgt database og provider og det.. men hvordan trækker jeg så dataene ud nu? Og hvordan skriver jeg til den?
Avatar billede devdude Nybegynder
06. juli 2003 - 21:11 #21
Hej igen.

Det vil være nemmere at benytte en TADOTable, hvis du kun skal have adgang til en enkelt tabel.

Benyt wizarden i "Connection String" property for at få adgang til databasen uden problemer med adgangskoden (gælder også for ADOConnection).

DevDude
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 21:16 #22
Hmm... når jeg prøver at gøre min ADOConnection Connection (i Design time) siger den "Handlingen blev annulleret" i en lille popup besked, hvorfor det?

Jeg har nu en ADOTable og en ADOConnection men kan ^^ ikke connecte...
Avatar billede devdude Nybegynder
06. juli 2003 - 21:21 #23
Har du benyttet wizarden i "Connection String"? Hvilken version af Access er databasen lavet med. Gamle versioner af Access kan give problemer.
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 21:29 #24
Ja jeg har benyttet wizarden... i Connection string står nu:

Provider=MSDASQL.1;Persist Security Info=False;Mode=ReadWrite

og det er en Access 2000 database..
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 21:33 #25
Hov.. det ser ud til den er connected nu...

Hvordan hiver jeg så nogle data ud?
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 21:39 #26
Har lige lavet en test:

Label1.Caption := ADOTable1.Fields.Fields[1].AsString;
Label2.Caption := ADOTable1.Fields.Fields[2].AsString;

Er der en smartere måde? Og hvordan får jeg anden række? Altså det der gir kun hhv. felt 2 (navn) og felt 3 (tlf. nr.) i databasen i FØRSTE række, altså kan jeg ikke tilgå person nr. 2... hvordan det?
Avatar billede devdude Nybegynder
06. juli 2003 - 21:45 #27
Hvordan vil du have dine data vist? Det bedste til tabeller er en TDBGrid.

Ellers har du gjort det det helt rigtigt. Du kan eventuelt også benytte "FieldByName":

Label1.Caption := ADOTable1.Fields.FieldByName('Dit_Kolonnenavn_1').AsString;
Label2.Caption := ADOTable1.Fields.FieldByName('Dit_Kolonnenavn_2').AsString;

DevDude
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 21:47 #28
devdude, snes TDBGrid er grimt så jeg vil gerne evt. bare kunne tage dataene fra den... men stadig hvordan får jeg fat i række 2 (person 2)? Og hvordan skriver man til databasen? Det første er vigtigst...
Avatar billede devdude Nybegynder
06. juli 2003 - 21:54 #29
Hej Ralle

Du er nu ude i noget helt fundamentalt omkring databaser i Delphi. Du vil nok have megen glæde af at læse nogle simple tutorials omkring dette.

For at bladre i databasen benytter du: First, Next, Prior og Last.
For at opdatere benytter du: Edit og Post;
For at indsætte nye rækker benytter du Append (eller Insert) og Post;

DevDude
Avatar billede exp-ralle Nybegynder
06. juli 2003 - 21:56 #30
Ok tak... ved ud hvor jeg kan finde sådan nogle tutorials? Smutter på ferie tideligt i morgen så hvis jeg ikke når det kan du så ikke smide et svar og så får du point når jeg kommer hjem?
Avatar billede devdude Nybegynder
06. juli 2003 - 22:19 #31
Hej igen

Du kan starte med at kigge i din startmenu under "Programmer>Borland Delphi X>Help>Developing Database Applications".

Held og lykke.

DevDude
Avatar billede exp-ralle Nybegynder
14. juli 2003 - 12:06 #32
Takker :D

smider du ikk et svar devdude?
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

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