/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Mærkelig fejl med Locate
Fra : Kurt Guldbæk


Dato : 13-04-04 20:44

Hej NG!
Jeg har efterhånden brugt megen tid på en fejl, som kommer når jeg bruger
Locate.
Jeg har en database "Ejendom.db" med flere felter, bl.a. et, der hedder
"AdresseID".

Når jeg kører dette
AdresseId := tblAdresser.FieldByName('AdrId').Text;
// Find først ud af, om AdrId findes i Ejendom.db
With tblEjendom do
Begin
If Locate('AdresseID',AdresseId,[loCaseInsensitive,loPartialKey])
Then
så får jeg fejlmeldingen 'tblEjendom: Field 'AdresseID' not found'.

Jeg har prøvet at ændre Field-name både i Ejendom.db og i Locate-statement
til andre navne; det gjorde ingen forskel.

Så har jeg lavet en ny database, "Testdb.db" med et feltnavn "TestField" og
derefter kørt dette:
AdresseId := tblAdresser.FieldByName('AdrId').Text;
// Find først ud af, om AdrId findes i Ejendom.db
With tblTestdb do
Begin
If Locate('TestField',AdresseId,[loCaseInsensitive,loPartialKey])
Then
Dette gav ingen fejl.

Kan fejlen evt. skyldes sekundære indexfiler? Ved Testdb.db var der ingen
sek. indexfiler!
Jeg har også prøvet at definere Ejendom.db igen, men godt nok med de samme
feltnavne som før pga de mange steder jeg bruger feltnavnene.
Kan databasen Ejendom.db være korrupt på en eller anden måde, eller er det
sådan noget man kan komme ud for med Paradox?

Jeg har også prøvet at installere Delphi5 oven i den originale for at være
sikker på, at Delphi er i orden!
Det næste bliver nok at afinstallere Delphi, fjerne alle databaserne og
derefter geninstallere i et andet dir.

Nogen forslag?

--
Med venlig hilsen
Kurt Guldbæk




 
 
Stig Johansen (14-04-2004)
Kommentar
Fra : Stig Johansen


Dato : 14-04-04 05:48

Kurt Guldbæk wrote:

> Jeg har efterhånden brugt megen tid på en fejl, som kommer når jeg bruger
> Locate.

Så brug SQL i stedet for

> Kan fejlen evt. skyldes sekundære indexfiler? Ved Testdb.db var der ingen
> sek. indexfiler!
> Jeg har også prøvet at definere Ejendom.db igen, men godt nok med de samme
> feltnavne som før pga de mange steder jeg bruger feltnavnene.
> Kan databasen Ejendom.db være korrupt på en eller anden måde, eller er det
> sådan noget man kan komme ud for med Paradox?

Prøv at undersøge den med database desktop programmet. Det kan være det
afslører noget.

> Jeg har også prøvet at installere Delphi5 oven i den originale for at være
> sikker på, at Delphi er i orden!

Hvis det er noget galt, er de BDE delen, og ikke Delphi delen.

> Det næste bliver nok at afinstallere Delphi, fjerne alle databaserne og
> derefter geninstallere i et andet dir.
>
> Nogen forslag?

Kun, som nævnt ovenfor, at gennemanalysere dine filer med database desktop.
Hvis den ikke afslører fejl, er det helt sikkert program fejl.

--
Med venlig hilsen
Stig Johansen

Kurt Guldbæk (14-04-2004)
Kommentar
Fra : Kurt Guldbæk


Dato : 14-04-04 07:22

Jeg svarer/spørger i teksten herunder.

"Stig Johansen" <aaa@bbb.com> skrev i en meddelelse
news:c5iftc$4ai$1@sunsite.dk...

....snip...
> Så brug SQL i stedet for
Ja, det har du jo nævn op til flere gange .
Jeg har læst et hæfte fra IDG om SQL og der ser ud til at være det rigtige.
Når man læser det er det enkelt. Imidlertid er det ikke lykkedes mig at få
andet end SELECT til at virke.
Jeg har ikke rigtig forstået hvordan jeg skal 'pakke' det ind til Delphi, så
det er der, det strander.
Hvordan skal en 'locate' se ud med SQL? Og hvordan tilføjer man en record?

....snip...
> Prøv at undersøge den med database desktop programmet. Det kan være det
> afslører noget.
Den virker OK, faktisk kommer fejlmeldingen også på en helt tom Ejendom.db.

....snip...
> Hvis det er noget galt, er de BDE delen, og ikke Delphi delen.
Ja, men jeg går ud fra, at den var med i en default installation. Jeg kunne
selvfølgelig have valgt komponenterne selv, men det gjorde jeg ikke!

--
Med venlig hilsen
Kurt Guldbæk




Stig Johansen (15-04-2004)
Kommentar
Fra : Stig Johansen


Dato : 15-04-04 05:43

Kurt Guldbæk wrote:

>> Så brug SQL i stedet for
> Ja, det har du jo nævn op til flere gange .
> Jeg har læst et hæfte fra IDG om SQL og der ser ud til at være det
> rigtige.

Det tror jeg også det er, men jeg kan ligeså godt advare dig på forhånd.
Overgang fra 'tabeller' til 'SQL' kræver en helt anderledes tankegang og
programmering.

> Når man læser det er det enkelt. Imidlertid er det ikke lykkedes
> mig at få andet end SELECT til at virke.
> Jeg har ikke rigtig forstået hvordan jeg skal 'pakke' det ind til Delphi,
> så det er der, det strander.

Man pakker det ind i SQL-propertien(en slags memofelt) i en 'Query
komponent', det kan eksempelvis være:
* TQuery, den der har været med siden Delphi 1, men kræver (desværre) BDE.
* TADOQuery, den der er bedst til Microsoft databaser, men så vidt jeg
husker, skulle man op i Delphi5/ENT for at få dem(?).
* TSQLQuery, den Borland satser på som cross platform teknologi. Den kom dog
først til i Delphi 6.

> Hvordan skal en 'locate' se ud med SQL?

Antag, vi har en TQuery komponent, der hedder EjendomQuery.
I sql-propertien skrives:
'SELECT Ejendomsnavn,Ejendomsadresse
FROM Ejendom
WHERE AdresseID = :AdrId' <<- :AdrId fortolkes som en parameter.

Et program eksempel er så:
.....
EjendomQuery.ParamByName('AdrId').AsString :=
tblAdresser.FieldByName('AdrId').AsString ; // Her sætter vi 'nøglen'
TRY
EjendomQuery.Open ; // Udfører sql'et mod databasen
EXCEPT
.... database fejl
END;
IF NOT EjendomQuery.Eof THEN BEGIN // Ejendommen eksisterer
........
END ELSE BEGIN // Ejendommen eksisterer ikke
........
END ;
EjendomQuery.Close ;

> Og hvordan tilføjer man en record?

Ved at bruge 'INSERT INTO...', i stedet for 'SELECT FROM...' i SQL'et.
Her skal man blot huske at bruge Query.ExecSQL i stedet for Query.Open.
Skal man slette en record, benyttes 'DELETE FROM...' i sql'et.

NB - Kurt, har du mulighed for at lægge din database beskrivelse i et
format, jeg kan læse på min Linux maskine? (HTML/Txt/rtf)
Jeg er ikke Linux-fanatiker, men min windows PC har p.t. en defekt harddisk.

--
Med venlig hilsen
Stig Johansen

Kurt Guldbæk (15-04-2004)
Kommentar
Fra : Kurt Guldbæk


Dato : 15-04-04 20:28

....snip...
> NB - Kurt, har du mulighed for at lægge din database beskrivelse i et
> format, jeg kan læse på min Linux maskine? (HTML/Txt/rtf)
> Jeg er ikke Linux-fanatiker, men min windows PC har p.t. en defekt
harddisk.
>
> --
> Med venlig hilsen
> Stig Johansen

Jeg kan pt. ikke komme i forbindelse med vor hjemmeside, så du får dem lige
her:

Beskrivelse af databaser til 'Ejendomme' 5/4 2004.

Adresser.db
Fieldname, Type, Size, Key
AdrId, A, 11
KommNr, I
Vejkode, I
HusNr, A, 6
PostNr, I
SogneNr, I

Sekundær Index navn, Indexfelt
Adresser_KommNrVejkode, KommNr + Vejkode
Adresser_KommuneNr, KommNr
Adresser_PostNr, PostNr
Adresser_SogneNr, SogneNr
............................

Amter.db
Fieldname, Type, Size, Key
AmtNr, A, 6
Amt, A, 30
............................

Brugere.db
Fieldname, Type, Size, Key
Brugernavn, A, 30, *
Initialer, A, 5, *
Adgangskode, A, 10, *

Sekundær Index navn, Indexfelt
BrugerAdgangskode, Adgangskode
BrugerInitialer, Initialer
............................

Ejendom.db
Fieldname, Type, Size, Key
EjendomsId, A, 30,
AdresseId, A, 11,
Ejerlav, I, ,
Lokalitet, A, 30,
MatrikelNr, A, 6,
Udskilt fra, A, 40
Memo, M, 20
Vej, I,
HusNr, A, 6
PostNr, I
Kilder, M, 100
Oprettet af, A, 5
Dato, @

Sekundær Index navn, Indexfelt
Ejendom_Ejerlav, Ejerlav
Ejendom_HusNr, HusNr
Ejendom_MatrikelNr, MatrikelNr
Ejendom_Vej, Vej
............................

EjendomsBilleder.db
Fieldname, Type, Size, Key
BilledNr, +
EjendomId, A, 20
Filnavn, A, 30
BilledMemo, M, 30

Sekundær Index navn, Indexfelt
BillederEjendomId, EjendomId
............................

EjerBilleder.db
Fieldname, Type, Size, Key
BilledId, +
Ejer_Id, I,
FilNavn, A, 30
BilledMemo, M, 30

Sekundær Index navn, Indexfelt
BillederEjerId, Ejer_Id
............................

Ejere.db
Fieldname, Type, Size, Key
Ejer_Id, +
Fra, A, 20, *
Til, A, 20
EjendomsId, A, 30
Bemærkning, M, 50
PersonId, I
EjendomsNavn, A, 30
Anvendelse, A, 30
Tilknyttede MatrNr, A, 100
Rettet af, A, 5
Dato, A, 12

Sekundær Index navn, Indexfelt
Ejer_db_EjendomsId, EjendomsId
Ejer_db_FraTil, Fra, Til
............................

Ejerlav.db
Fieldname, Type, Size, Key
KommuneNr, S
EjerlavNr, I,
EjerlavNavn, A, 50

Sekundær Index navn, Indexfelt
Ejerlav_EjerlavNr, EjerlavNr
Ejerlav_KommuneNr, KommuneNr
............................

Kommuner.db
Fieldname, Type, Size, Key
Amt, S
KommuneNr, I
KommuneNavn, A, 30

Sekundær Index navn, Indexfelt
Kommuner_Amt, Amt
Kommuner_KommuneNr, KommuneNr
............................

Lokalitet.db
Fieldname, Type, Size, Key
LokalitetId, +
Lokalitet, A, 30

Sekundær Index navn, Indexfelt
Lokalitet_Id, LokalitetId
............................

Personer.db
Fieldname, Type, Size, Key
PersonId, +, , *
Navn, A, 50, *
Født, A, 10
Død, A, 10
Gift_med, M, 20
Gift, A, 30
Børn, M, 20
Bem, M, 50

Sekundær Index navn, Indexfelt
Personer_Død, Død
Personer_Født, Født
Personer_Gift, Gift
Personer_Navn, Navn
Personer_PersonId, PersonId
............................

PostNr_By.db
Fieldname, Type, Size, Key
PostNr, I
By, A, 30

Sekundær Index navn, Indexfelt
PostNr_PostNr, PostNr
............................

Sogne.db
Fieldname, Type, Size, Key
SognNr, I
SognNavn, A, 30

Sekundær Index navn, Indexfelt
Sogne_SognNr, SognNr
............................

Veje.db
Fieldname, Type, Size, Key
KommNr, I
VejKode, I
Vejnavn, A, 35

Sekundær Index navn, Indexfelt
Veje_KommNr, KommNr
Veje_VejKode, VejKode
.............................

Jeg har et FTP-dokument, der viser sammenbindingen af databaserne, den
sender jeg op på hjemmesiden når jegigen får hul dertil!

--
Med venlig hilsen
Kurt Guldbæk



Kurt Bilde (15-04-2004)
Kommentar
Fra : Kurt Bilde


Dato : 15-04-04 13:54

Hej Kurt !

Kurt Guldbæk wrote:
> Jeg har en database "Ejendom.db" med flere felter, bl.a. et, der hedder
> "AdresseID".
>
> Når jeg kører dette
> AdresseId := tblAdresser.FieldByName('AdrId').Text;
> // Find først ud af, om AdrId findes i Ejendom.db
> With tblEjendom do
> Begin
> If Locate('AdresseID',AdresseId,[loCaseInsensitive,loPartialKey])

Nu er det ikke fordi jeg tror du ikke har styr på det, men hvorfor
hedder det AdresseID i Ejendom og AdrId i Adresser???? (lumsk mistanke
hedder det AdresseID og ikke AdrId i Ejendomme)

-Kurt


Kurt Guldbæk (15-04-2004)
Kommentar
Fra : Kurt Guldbæk


Dato : 15-04-04 20:19

"Kurt Bilde" <kub@sam.sdu.dk> skrev i en meddelelse
news:c5m02q$l2a$1@news.net.uni-c.dk...
> Hej Kurt !
>
> Kurt Guldbæk wrote:
> > Jeg har en database "Ejendom.db" med flere felter, bl.a. et, der hedder
> > "AdresseID".
> >
> > Når jeg kører dette
> > AdresseId := tblAdresser.FieldByName('AdrId').Text;
> > // Find først ud af, om AdrId findes i Ejendom.db
> > With tblEjendom do
> > Begin
> > If Locate('AdresseID',AdresseId,[loCaseInsensitive,loPartialKey])
>
> Nu er det ikke fordi jeg tror du ikke har styr på det, men hvorfor
> hedder det AdresseID i Ejendom og AdrId i Adresser???? (lumsk mistanke
> hedder det AdresseID og ikke AdrId i Ejendomme)
>
> -Kurt

Det er egentlig en tilfældighed. Ejendomme.db er af forholdsvis gammel dato
medens Adresser.db er et udtræk af en database, som Kort- og
Matrikelstyrelsen har med alle adresser (ca. 2,2 millioner) i Danmark. Jeg
foretrækker normalt at bruge hele navnet i feltnavnene, men den her smuttede
altså med fra KMS!

--
Med venlig hilsen
Kurt Guldbæk





Stig Johansen (16-04-2004)
Kommentar
Fra : Stig Johansen


Dato : 16-04-04 03:43

Kurt Guldbæk wrote:

> Hej NG!
> Jeg har efterhånden brugt megen tid på en fejl, som kommer når jeg bruger
> Locate.
> Jeg har en database "Ejendom.db" med flere felter, bl.a. et, der hedder
> "AdresseID".
>
> Når jeg kører dette
> AdresseId := tblAdresser.FieldByName('AdrId').Text;
> // Find først ud af, om AdrId findes i Ejendom.db
> With tblEjendom do
> Begin
> If Locate('AdresseID',AdresseId,[loCaseInsensitive,loPartialKey])
> Then
> så får jeg fejlmeldingen 'tblEjendom: Field 'AdresseID' not found'.

Det begynder snart at knibe med ideer, og det kan godt være jeg lyder dum
men alligevel:
Har du sikret dig, at tabellen(tblEjendom) er åben ved kald af locate?
Kan det tænkes, at du er kommet til at 'rette' tblEjendom i Object
Inspector?
Det bedste råd, du kan få herfra er at stoppe programmet ved din locate
sætning(f4), og singlesteppe(f7+f8) videre for at finde flere detaljer.

--
Med venlig hilsen
Stig Johansen

Kurt Guldbæk (16-04-2004)
Kommentar
Fra : Kurt Guldbæk


Dato : 16-04-04 17:10

> Det begynder snart at knibe med ideer, og det kan godt være jeg lyder dum
> men alligevel:
> Har du sikret dig, at tabellen(tblEjendom) er åben ved kald af locate?
> Kan det tænkes, at du er kommet til at 'rette' tblEjendom i Object
> Inspector?
> Det bedste råd, du kan få herfra er at stoppe programmet ved din locate
> sætning(f4), og singlesteppe(f7+f8) videre for at finde flere detaljer.
>
> --
> Med venlig hilsen
> Stig Johansen

Jeg har skam brugt trce meget, ellers er det næsten ikke til at lokalisere
hvor fejlen er. Jeg plejer at sætte et breakpoint og singlesteppe derfra.

Derved er det også lykkedes at finde årsagen til Locate-fejlen.

Efter at have gnavet noget i manualen fandt jeg
tblEjendom.GetFieldNames(ListBox1.Items);
og fik vist feltnavnene i en listbox. Da kunne jeg godt se, at der manglede
adskillige navne. Desuden var der andre felter, som jeg genkendte fra andre
steder i programmet.
Efter lidt forsøg fandt jeg ud af, at årsagen var, at jeg i den TTable, der
holdt tblEjendomme havde været inde i FieldEditor for at lave nogle LookUp,
så jeg i en TDBGrid kunne få vist navnene på veje, kommuner mm. I den
forbindelse havde jeg slettet de feltnavne, der ikke skulle bruges i
pågældende TDBGrid. Der var jo ingen grund til at slæbe rundt med mere end
der skulle bruges.
Den sammenhæng kendte jeg ikke, men så husker jeg det nok endnu bedre i
fremtiden.

Løsningen er at definere en TTable med LookUp specielt til den pågældende
TDBGrid, men det er jo heller ikke noget problem!

Tak til jer alle for jeres hjælpsomhed!

Og til Stig: Jeg vil gerne fortsætte 'SQL-kurset' lidt senere, der er lige
en 40-års fødselsdag, der skal overståes!.
--
Med venlig hilsen
Kurt Guldbæk



Stig Johansen (17-04-2004)
Kommentar
Fra : Stig Johansen


Dato : 17-04-04 04:58

Kurt Guldbæk wrote:

> der er lige en 40-års fødselsdag, der skal overståes!.

Hmm.. 40 år ... huske - huske .. næh det var vist i sidste årtusinde..

--
Med venlig hilsen
Stig Johansen

Kurt Guldbæk (17-04-2004)
Kommentar
Fra : Kurt Guldbæk


Dato : 17-04-04 06:19

"Stig Johansen" <aaa@bbb.com> skrev i en meddelelse
news:c5qa3m$sgr$1@sunsite.dk...
> Kurt Guldbæk wrote:
>
> > der er lige en 40-års fødselsdag, der skal overståes!.
>
> Hmm.. 40 år ... huske - huske .. næh det var vist i sidste årtusinde..
>
> --
> Med venlig hilsen
> Stig Johansen

Enig! Det er min søns 40års fødselsdag.
--
Med venlig hilsen
Kurt Guldbæk




Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409080
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste