Announcement

Collapse
No announcement yet.

Paradoxtabelle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Paradoxtabelle

    Tagchen,

    ich habe folgendes problem:

    wir haben eine Paradoxtabelle in die Wir unsere Materialeinkäufe eintragen. damit im Feld Lieferant nicht
    unzählig verschiedene Schreibweisen entstehen, habe ich eine Lieferant-Tabelle erstellt in die jeder Lieferant
    einmal eingetragen wird. Diese Tabelle heißt Lieferan.db. Wenn ich jetzt in der Materialeinkaufstabelle das
    Feld Lieferant verlasse wird die Schreibweise des Lieferanten überprüft und wenn die Schreibweise nicht
    stimmt, kann man aus der Lieferan.db Tabelle einen Lieferanten heraus- suchen oder den neuen hinzufügen.
    beim Überprüfen der Schreibweise kommt seit letzter Woche regelmäßig die Fehlermeldung:

    "Interner Grenzwert überschritten(kontextabhängig) Tabelle: h:\daten\prolabau\database\lieferan.db".

    Welcher Grenzwert ist überschritten und warum und was mache ich dagegen.

    Die Materialtabelle hat 13870 Datensätze und die Lieferanten-Tabelle hat 180 Datensätze und kein
    Mainindex(eindeutiger Index). Die Materialtabelle hat mehrere Spalten, die Lieferantentabelle nur Eine, nämlich
    die Spalte Lieferant.

    Wer weiß rat. brauche dringend Hilfe!!!!

    mfg

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus,

    ob dies Dein Problem löst, weiß ich nicht, aber auch für Nachschlagetabellen sollte man grundsätzlich einen primären Index anlegen. Wenn Du dann geschickt in dieser Nachschlagetabelle suchst (wie ???) verbessert sich der Zugriff.

    Ka

    Comment


    • #3
      Hallo Markus,

      auf Deine Frage antwortet ich mit meinen beliebten Standardfragen: <br>
      1. Welche BDE-Version wird verwendet (16- oder 32-Bit)? <br>
      2. Wurde bereits versucht, in der <b>BDE-Verwaltung</b> die internen INIT-Parameter zu erhöhen (Beschreibung dazu steht in der BDE-Hilfe)? <br>
      3. An welcher exakten Stelle im Programmcode (inklusive der VCL-Units) bleibt der Delphi-Debugger bei der schrittweisen Ausführung stehen? Welche IDAPI-Funktion hat die VCL dabei zuletzt aufgerufen? <br>
      4. Wie sieht im Programm die Überprüfung der Lieferantensuche aus? <br>
      5. Wird eventuell eine BDE-Fehlernummer angegeben?

      Es geht bei diesen Fragen darum, zu klären, wer diese Fehlermeldung auslöst (Paradox-Tabellenbeschränkung oder BDE oder VCL). Eine Aufstellung der BDE-Grenzwerte ist unter <i>http://www.borland.com/devsupport/bde/ti_list/TI2751.html</i> zu finden

      Comment


      • #4
        Guten Tag Herr Kosch,

        es geht um die 16bit BDE version 2.5.
        das stichwort init, finde ich in der bde hilfe nicht.
        der paradoxtreiber ist folgender maßen eingstellt:

        version: 1.0
        type: file
        netdir: H:\DATEN\PROLABAU\NET\
        langdriver: Paradox 'intl'
        level: 4
        blocksize: 10240
        fillfactor: 95
        strictintegerty: true

        system hat folgende werte:

        version: 1.0
        local share: false
        minbuffsize: 2048
        maxbuffsize:12800
        langdriver: paradox 'intl'
        maximalfilehandles: 200
        sysflags: 0
        low memory usage limit: 64
        auto odbc: true
        default driver: paradox
        sqlqrymode: kein wert

        ich hoffe sie fangen mit diesen angaben was an!!!

        die genaue code-stelle konnte ich bisher nicht ausmachen, da die fehlermeldung nicht
        regelmäßig kommt.

        eine bde-fehlernummer bekomme ich nicht!!!

        hier der code der in einem onexit-ereignis einer dbedit-komponente steht:

        procedure TMaterial.DBLieferantExit(Sender: TObject);
        var
        liefer,search:string;
        i,z:integer;
        begin
        DBLieferant.color := clwhite;
        liefer := DBLieferant.text;

        if (table1.state = dsedit) or (table1.state = dsinsert) then
        begin
        application.createform(Tlieferantenuebernahme,lief erantenuebernahme);
        with lieferantenuebernahme do
        begin
        if Query1.active = true then Query1.close;
        Query1.sql.clear;
        Query1.sql.add('select * from lieferan where lieferant like :l');
        Query1.params[0].AsString := liefer;
        Query1.open;
        query1.disableControls;
        query1.first;
        z := 0;
        while not Query1.eof do
        begin
        query1.next;
        z := z + 1;
        end;
        query1.enableControls;
        end;

        {Wenn Lieferant NICHT richtig eingegeben wurde}
        if z <> 1 then
        begin
        search := copy(liefer,1,3);
        with lieferantenuebernahme do
        begin
        if Query1.active = true then Query1.close;
        Query1.sql.clear;
        Query1.sql.add('select * from lieferan where lieferant like :l');
        Query1.params[0].AsString := search + '%';
        Query1.open;
        lieferantenuebernahme.neu.text := dblieferant.text;
        lieferantenuebernahme.show;
        BitBtn1.setfocus;
        end;
        end;
        end;
        end;

        die Tabelle hatte bisher eine einzige Spalte und die habe ich als primärindex definiert,
        weil jeder lieferant nur einmal drin kommen soll.
        das habe ich jetzt mal testweise geändert. ich habe noch eine zählerspalte hinzugefügt, die jetzt den primärindex hat!!! jetzt muß ich warten bis meine kolleginnen wieder
        material eingeben.

        mfg

        markus lemck
        Herzliche Grüße

        Markus Lemcke
        barrierefreies Webdesign

        Comment


        • #5
          Hallo Markus,

          bei einer 16-Bit-Anwendung gibt es das Problem, das Delphi 1 schon immer mit den Folgen der knappen Ressourcen zu kämpfen hatte (die Win16-Grenzen gelten unabhängig davon, wieviel Arbeitsspeicher im Rechner vorhanden ist). Ich bin mir daher gar nicht mal so sicher, ob die Fehlerursache in der Paradox-Datenbank oder der 16-Bit-BDE liegt.

          Solange sich der Fehler nicht reproduzieren lässt, ist es der prichwörtliche Heuhaufen, in dem die Nadel gesucht wird. Steht das Windowns-SDK und somit das Microsoft-Tool STRESS.EXE zur Verfügung? Wenn ja, kann man mit diesem Tool die kritischen Ressourcenteile von Win16 unter eine definierte Grundlast setzen, so dass sich diese mögliche Fehlerursache schnell abklären lässt.

          Im Beispiel wird bei Dir <b>application.createform(Tlieferantenuebernahme,l ieferantenuebernahme); </b> aufgerufen - aber wann wird dieses Formular wieder zerstört? Es sieht so aus, als ob der zweite Aufruf die Formularreferenz überschreibt und die alte Instanz als Speicherleiche übrigbleibt

          Comment


          • #6
            Ich vermute das der Tabellen Header vergroesert werden muss.
            Der Code steht im Buch von Andreas (kosch);
            Habe leider nicht im Kopf;

            Andere Ide: Setze den Header hoer;
            Rekonstroiere die DB im DB Exploerer
            Gruss
            Franz Humplmai

            Comment

            Working...
            X