Avatar billede madshenrik Nybegynder
11. februar 2001 - 23:04 Der er 16 kommentarer og
2 løsninger

Empty table

Jeg skal have udført denne kode på en tabel men kan ikke få det gjort på grund af at den i brug eller andre fejl.

Notatdatamodul.FagTabel.EmptyTable;

Hvad skal man huske jeg ved at man skal være i exclusive mode, er der andet.

Mads
Avatar billede pstric Nybegynder
11. februar 2001 - 23:08 #1
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
Avatar billede hatecaps Nybegynder
11. februar 2001 - 23:15 #2
der er to betingelser for at emptytable kan virke. Der må ikke være andre brugere \"logget\" på registeret, og dit table skal være lukket.
Avatar billede madshenrik Nybegynder
11. februar 2001 - 23:29 #3
Det er nok det med brugeren hvordan sikre man det.

mads
Avatar billede madshenrik Nybegynder
11. februar 2001 - 23:33 #4
Jeg får besked på at user = administrator.

Mads
Avatar billede hatecaps Nybegynder
11. februar 2001 - 23:59 #5
der må ikke være andre programmer der har åbnet registeret, og alle lock filer der peger på registeret skal være fjernet
Avatar billede madshenrik Nybegynder
12. februar 2001 - 10:12 #6
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. 

Mads
Avatar billede hatecaps Nybegynder
12. februar 2001 - 10:43 #7
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

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, Db, DBTables;

type
  TForm1 = class(TForm)
    Table1: TTable;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  table1.emptytable;
end;

end.

hvor du sætter dit alias op for table1 og vælger et register du vil tømme. Hvis det virker ved du at der er noget andet galt i dit egentlige program.

ha\' det godt
hatecaps
Avatar billede madshenrik Nybegynder
12. februar 2001 - 13:46 #8
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å.

Mads
Avatar billede hatecaps Nybegynder
12. februar 2001 - 14:41 #9
hehe, gid der gjorde. hvis du vil kan du poste din kode her, så vil jeg prøve at kigge på den
Avatar billede pellelil Nybegynder
12. februar 2001 - 15:59 #10
Hvad med at bruge et SQL-kald, eller er det \"for nemt\" :-)
Avatar billede madshenrik Nybegynder
12. februar 2001 - 18:12 #11
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;

Mads
Avatar billede madshenrik Nybegynder
12. februar 2001 - 18:16 #12
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.

Mads
Avatar billede pellelil Nybegynder
12. februar 2001 - 18:29 #13
Hvis du vil slette alt så kan du nøjes med \"DELETE FROM FAG\"
Avatar billede madshenrik Nybegynder
12. februar 2001 - 23:11 #14
Okey det lyder sku nemt.

Mads
Avatar billede pellelil Nybegynder
13. februar 2001 - 07:23 #15
madshenrik> Det var det jeg sagde :-)

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>
Avatar billede madshenrik Nybegynder
13. februar 2001 - 15:05 #16
Okey. Men problemet med at det ene tal der bliver tilbage har jeg stadig. Hvilket jeg ikke forstår.

Mads
Avatar billede madshenrik Nybegynder
14. februar 2001 - 11:43 #17
Tak for hjælpen. Indtil videre må jeg leve med den fejl.

Mads
Avatar billede pellelil Nybegynder
14. februar 2001 - 12:02 #18
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).
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