Anzahl Datensätze ermitteln aus SQL Abfrage

Alles was sich mit dem Thema dynamische XML Formulare auf Basis des LiveCycleDesigners beschäftigt
paprika
Beiträge: 29
Registriert: 29.08.2012, 16:44

Anzahl Datensätze ermitteln aus SQL Abfrage

Beitrag von paprika » 17.09.2012, 10:52

Hallo zusammen

Ich habe eine dynamische Tabelle in der ich die Daten aus einer SQL Datenbank Abfrage darstellen will. Dies klappt auch soweit

Mittels instanceManager.addInstance(1) möchte ich nun die benötigten Tabellenzeilen hinzufügen. Das einzige Problem ist nur ich weiss nicht wieviele Zeilen ich benötige.

Code: Alles auswählen

oDB = xfa.sourceSet.resolveNode(DB).clone(1);
bQuery = oDB.resolveNode("#command").query.select.value + " where ku_id = " + kundenid;
Wäre sehr dankbar wenn jemand weiterhelfen könnte.

Gruss Claudia



Benutzeravatar
FileAffairs
Beiträge: 372
Registriert: 15.09.2008, 20:14

Anzahl Datensätze ermitteln aus SQL Abfrage

Beitrag von FileAffairs » 17.09.2012, 12:02

Hallo paprika,

das kannst Du über eine Schleife machen:

Code: Alles auswählen

while (!oDB.isEOF()) {
  // code goes here
  oDB.next()
}
Gruß

Maruan Sahyoun | fileaffairs.de

paprika
Beiträge: 29
Registriert: 29.08.2012, 16:44

Anzahl Datensätze ermitteln aus SQL Abfrage

Beitrag von paprika » 17.09.2012, 12:19

Hallo FileAffairs

Herzlichen Dank, das funktioniert super, nur hab ich jetzt im Zähler die totale Anzahl der Datensätze und nicht die gefilterte.
Was muss ich anpassen.

Gruss Claudia

Benutzeravatar
FileAffairs
Beiträge: 372
Registriert: 15.09.2008, 20:14

Anzahl Datensätze ermitteln aus SQL Abfrage

Beitrag von FileAffairs » 17.09.2012, 12:30

Hallo paprika,

Du hast zwar das Query Statement zusammengebaut (in die Variable bQuery aber noch nicht ausgeführt. Dazu müsstest Du es auch dem select.value zuweisen.

Also:

Code: Alles auswählen

oDB.resolveNode("#command").query.select.value = bQuery;
oDB.open();
// while loop goes here
oDOB.close();

Lieben Gruß

Maruan Sahyoun | fileaffairs.de

paprika
Beiträge: 29
Registriert: 29.08.2012, 16:44

Anzahl Datensätze ermitteln aus SQL Abfrage

Beitrag von paprika » 17.09.2012, 13:59

DANKE! Wir sind ganz nah dran ;-) Aber nun geschieht was sehr seltsames!

nochmals den ganzen Code

Code: Alles auswählen

gridDB = "Fzg_List";        // Datenverbindung für Datenübersicht
kundenid = 1333;

// DB für Datengitter clonen und als Query speichern
oDB = xfa.sourceSet.resolveNode(gridDB).clone(1);
baseQuery = oDB.resolveNode("#command").query.select.value + " where ku_id = " + kundenid;
// zuweisen und öffnen
oDB.resolveNode("#command").query.select.value = baseQuery;
oDB.open()

//Datensätze zählen
var i counter = 0;
var i = 0;

while (!oDB.isEOF()) {
counter++;
oDB.next()
}

app.alert(counter);

while( i < (counter-1)){
    Formular1.TF1.Fzg_Tabelle.Tabelle1.Zeile1.instanceManager.addInstance(1) ;
    i++;
}
 
Zur Kontrolle hab ich mir die Anzahl Datensätze ausgeben lassen, alles stimmt alles. Lösche ich nun aber die Zeile app.alert(counter) werden zuviele Zeilen erstellt. ??? Das übersteigt nun meine Logik

Benutzeravatar
FileAffairs
Beiträge: 372
Registriert: 15.09.2008, 20:14

Anzahl Datensätze ermitteln aus SQL Abfrage

Beitrag von FileAffairs » 17.09.2012, 15:51

Hallo paprika,

entweder setzt Du die addInstance Methode mit in die Schleife oDB.next() oder Du verwendest setInstances(Counter). Würde ersten Weg gehen.

Schönen Gruß

Maruan Sahyoun | fileaffairs.de

paprika
Beiträge: 29
Registriert: 29.08.2012, 16:44

Anzahl Datensätze ermitteln aus SQL Abfrage

Beitrag von paprika » 17.09.2012, 18:34

das Resultat ist auf jedem Weg das gleiche. Ich bekomme doppelt so viele Zeilen wie ich benötige. Mir ist nicht klar wieso, ich habe mir jetzt aber geholfen indem ich den Counter halbiere.

Hauptsache es funktioniert, vielleicht blick ich irgendwann mal noch durch.
Herzlichen Dank für die Hilfe!

Gruss Claudia

Benutzeravatar
DanielDD92
Beiträge: 47
Registriert: 07.03.2012, 08:15

Anzahl Datensätze ermitteln aus SQL Abfrage

Beitrag von DanielDD92 » 30.07.2013, 10:41

[line]function nSuchen(Suchwert, Suchbegriff, nDirektsuche){
    var nCounter = 0;
    var nIndex = 0;
    var nStat;
    var nRegExSuche = false;
    var TestSuchbegriff = nTestSuchbegriff(Suchbegriff);
    var oRecord = xfa.record.Datenverbindung.resolveNode(Suchwert);
    nDBClone.first();
    
    while(!nDBClone.isEOF()){
        nRegExSuche = nSucheRegExp(Suchbegriff, oRecord.value, TestSuchbegriff);
        if(nRegExSuche){
            nCounter++;
            nObject.nData[nIndex +1].AuNummer = xfa.record.Datenverbindung.resolveNode("AuNummer").value;
        }
        nDBClone.next();
    }
    nObject.nCounter = nCounter;    
    if(!nDirektsuche){
        if(nCounter){
            return nObject;
        }
        else{
            nStat = nInfo(false, false, Suchbegriff, Suchwert, true, nObject);
            return nStat;
        }
    }
    else{
        if(nCounter){
            if(nCounter > 1){
                nStat = nMultipleDaten(nObject, Suchbegriff, Suchwert);
                if(!nStat){
                    nBackToData();
                }
                return nStat;
            }
            else{
                nLoadData(nObject.sObj[1]);
                nDataIndex[0] = "isFirst";
                nDataIndex[1] = nObject.sObj[1]-1;
                return true;
            }
        }
        else{
            var nStat = nInfo(false, false, Suchbegriff, Suchwert, true, nObject);
            nBackToData();
            return nStat;
        }
    }
}


function nTestSuchbegriff(nSuchbegriff){
    var nTest = new RegExp([*]","gm");
    return nTest.test(nSuchbegriff);
}


function nSucheRegExp(Suchbegriff, nValue, nPlaceHolder){
    if(!nPlaceHolder){
        var nRegExTest = new RegExp(Suchbegriff,"igm");
        var nReturn = nRegExTest.test(nValue);
        return nReturn;
    }
    else{
        var nStatus = true;
        var nSplitSuchbegriff = Suchbegriff.split("*");        
        for(var i = 0; i < nSplitSuchbegriff.length; i++){
            if(nSplitSuchbegriff.length > 0){
              
 var nStringSearch = new RegExp(nSplitSuchbegriff,"igm");
                var nTestValue = nStringSearch.test(nValue);
                if(nTestValue){
                    nValue = nValue.substring(nStringSearch.lastIndex);
                }
                else{
                    nStatus = false;
                    break;
                }
            }
        }
        return nStatus;
    }
}


 Formular1.#subform[0].Textfeld6::exit - (JavaScript, client)
if(nAccessOffen){
    if(this.rawValue != null & this.rawValue != ""){
        var nStatus = Scripte.nSuchen("AuNummer", this.rawValue, true);
        if(nStatus){
            this.rawValue = null;
        }
    }
}
else{
    app.alert("Keine Datenbank geöffnet.");
    this.rawValue = null;
}

 Formular1.#subform[0].Close::click - (JavaScript, client)
if(nAccessOffen){
    nDBClone.close();
    nAccessOffen = false;
}

 Formular1.#subform[0].Open::click - (JavaScript, client)

//EINGEFÜGT BEI FORMULAR READY

 Formular1::ready:form - (JavaScript, client)
nDBClone = xfa.sourceSet.Datenverbindung.clone(1);

nDBClone.open();
nAccessOffen = true;
[line]
Hallo,

muss mich hier jetz mal einklinken, hoffe ich bin nicht zu spät dran...

Bin mit einer SQL-DB auf einem unserer Server verbunden. Hab nur waldes script bisschen umgeschrieben und gekürzt, da die Performance wirklich bescheiden ist..

SQL-DB mit ca. 40000 einträgen soll Mit dem feld AuNummer gefiltert werden, und die dazugehörigen Daten zu diesem Datensatz in den übrigen Feldern ausgegeben werden.

Datenverbindung geht über eine SQL Abfrage, die ORDER BY AuNummer enthält. Bis Datensatz 4000 ca. geht diese Abfrage hier in unter 5 Sek. Komme ich aber über 10000, ist es fast unmöglich, innerhalb 10 minuten den Datensatz zu finden, er rüttelt sich praktisch zu tode...

Kann man mir sagen, was an dem Code falsch ist, oder wie ich die Dauer, Datensätze zu finden, verkürzen kann. So hat das leider keinen sinn..

Hoffe auf Hilfe :?
 
MfG Daniel
[/*]

Benutzeravatar
FileAffairs
Beiträge: 372
Registriert: 15.09.2008, 20:14

Anzahl Datensätze ermitteln aus SQL Abfrage

Beitrag von FileAffairs » 30.07.2013, 11:11

Hallo Daniel,

wenn ich das richtig sehe so machst Du kein spezifisches Select auf die Datenbank sondern selektierst alle Datensätze und gehst dann durch alle Ergebnisse.

Weiter oben findest Du ein Beispiel (vom 17 Sep 2012 13:59) bei der die Abfrage mittels SQL Query eingeschränkt wird.

Lieben Gruß

Maruan Sahyoun | fileaffairs.de

Benutzeravatar
DanielDD92
Beiträge: 47
Registriert: 07.03.2012, 08:15

Anzahl Datensätze ermitteln aus SQL Abfrage

Beitrag von DanielDD92 » 30.07.2013, 11:55

Vielen, vielen Dank für die schnelle Antwort.
Jaa ich weiß, bin leider nicht gerade geübt in JavaScript :( Habe keinen Schimmer, wie ich diese Beschreibung auf meine Anwendung übertragen kann..

Für eine JavaScript-Schulung reicht mir die Zeit leider nicht mehr, das Projekt sollte bald fertig sein. :? Immer diese knappen Zeitfenster...

Nur weiß ich leider nicht, welche Funktionen ich behalten kann vom aktuellen Script und welche ich Ändern/Rauswerfen soll. Ohje, wird wohl noch was heftigeres... :-D

Danke nochmals.

EDIT: Mit SQL-Abfragen kenne ich mich aus, nur das übertragen auf JavaScript fällt mir zu schwer.. Vll hilft das weiter ( Hoffe das ist keine aussichtslose Situation)

Antworten