Ja, man skal huske at skrive hvilken database man bruger, så svarerne ikke skal sidde og gætte ;-)
Hvis du bruger Paradox, så må du ikke lukke et kørende program med ctrl-f2. Forbindelsen til databasen bliver stående, og du bliver nødt til at gå ind i db dir\'et og fjerne den fil der hedder *.lck
hatecaps hvad betyder det. Kan man ikke programmere sig til at tabellen er lukket for alle andre end lige det program der udfører empty table. Da programmet selv bruger tabellen er der måske en måde hvorpå man kan afslutte den forbindelse midlertidig indtil empty table er udført.
hvis du altid sørger for at alle programmer der bruger dette table lukker det ordentlig efter sig, burde der ikke eksistere nogen lock filer der forhindrer dig i at bruge emptytable. Det med exclusive er sådant set lige meget, da du sætter og fjerner exclusive nåd du åbner og lukker registeret. Da du skal bruge emptytable mens table\'et er lukket gi\'r det sig selv :-) Hvis du får meddelelsen \"register/file is locked by other user/netfile, skal du tjekke følgende biblioteker: biblioteket angivet i BDE administratoren under Configuration | Drivers | Native | Paradox \\ NetDir, biblioteket Databases | Dit alias \\ Path, og hvis du tildeler et session.privatedir i dit program også dette. Hvis der er en eller flere .lck filer i et af disse biblioteker, er det sandsynligvis derfor du får fejlen. Normalt bør disse .lck filer kun forefindes mens der rent faktisk er åbne register i brug. Hvis de stadigvæk eksisterer efter at du har lukket programmet, er det fordi du glemmer at lukke et table inden programmet lukkes ned. Derfor skal du først finde ud af hvor det er, og når den fejl er løst, bør du kunne bruge emptytable. Det ville måske være en ide at lave et lille testprogram á la
Det virker fra et andet program. Men på hele harddisken findes der ingen lck filer. Nu har jeg forsøgt at udmarkere alle de steder hvor jeg bruger tabellen. Findes der en smart måde at fejl finde dette på.
Har lavet denne algoritme i sql og den holder også 99 ud af 100 gange men der er tidspunkter hvor der sker noget mærkeligt. Her er kode. s := 1; r := Notatdatamodul.FagTabel.RecordCount; while s <= r do begin with Notatdatamodul.FagQuery do begin
sql.Clear; sql.add(\'Delete from Fag\'); sql.add(\'where Fag.Nummer = :IND\'); ParamByName(\'IND\').ASINTEGER := s; ExecSQL; sql.Clear; end; s := s + 1; end;
Det der sker er når jeg kun har en record i Fag og jeg så sletter denne så slettes kun field fag i tabellen fag og ikke Nummer. Men dette er kun i enkelte tilfælde og jeg tror det har nogt at gøre med at paradox vist har en data indgang i sine tabeller.
Hvis du endelige vil sætte betingeleser på at så gør det på SQL niveau i stedet for på Pascal-niveau (så vidt det er muligt). Hvis din applikation eksempelvis køre i et C/S miljø så er der forskel på at slette 500 poster (en af gangen) i stedet for at sende et SQL-request hvorefter serveren slette de 500 poster i en operation (for ikke at tale om reduceret mængde af netværkstrafik).
<SNIP> DELETE FROM FAG where (FAG.Nummer < 501) </SNIP>
Jeg har oplevet at nogle DB-servere har krævet at noget sådan blev \"pakket ind\" i noget transaktions-styring men jeg ved ikke med Paradox (har ikke hørt/selv oplevet at dette har været krævet).
Synes godt om
Ny brugerNybegynder
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.