Zum Inhalt springen

Peregrin

Mitglieder
  • Gesamte Inhalte

    236
  • Benutzer seit

  • Letzter Besuch

Beiträge von Peregrin

  1. hi,

    lt. java-almanac funktioniert es folgendermassen:

        // If expand is true, expands all nodes in the tree.
    
        // Otherwise, collapses all nodes in the tree.
    
        public void expandAll(JTree tree, boolean expand) {
    
            TreeNode root = (TreeNode)tree.getModel().getRoot();
    
    
            // Traverse tree from root
    
            expandAll(tree, new TreePath(root), expand);
    
        }
    
        private void expandAll(JTree tree, TreePath parent, boolean expand) {
    
            // Traverse children
    
            TreeNode node = (TreeNode)parent.getLastPathComponent();
    
            if (node.getChildCount() >= 0) {
    
                for (Enumeration e=node.children(); e.hasMoreElements(); ) {
    
                    TreeNode n = (TreeNode)e.nextElement();
    
                    TreePath path = parent.pathByAddingChild(n);
    
                    expandAll(tree, path, expand);
    
                }
    
            }
    
    
            // Expansion or collapse must be done bottom-up
    
            if (expand) {
    
                tree.expandPath(parent);
    
            } else {
    
                tree.collapsePath(parent);
    
            }
    
        }
    
    

    müsstest halt noch auf knotenebene 2 einschränken beim zusammenfalten...

    hth...

  2. hi,

    hmmm, ich fände es sauberer, wenn man durch die buttons iteriert und den gewünschten löscht.

    for each btn in Commandbars("Standard").Controls
    
      if(btn.caption = "deine überschrift")then
    
        btn.delete  'oder wie auch immer das geht...
    
        exit for
    
      end if
    
    next
    
    

    sonst gibt es ein problem, wenn der 7. button mal was anderes ist...

    hth...

  3. hi,

    hoffe, ich hab das richtig verstanden...

    select count(*) from tabelle t1
    
    where t1.name = 'A'
    
      and exists
    
      (
    
        select 1 from tabelle t2 
    
        where t2.name = 'B'
    
          and t2.stop < t1.start
    
          and to_char(t2.start, 'DD.MM.YYYY') = to_char(t1.start, 'DD.MM.YYYY')
    
      )

    sollte die anzahl der einträge mit namen 'A' aus tabelle liefern, zu denen es einen eintrag in tabelle mit namen 'B' gibt, welcher am gleichen tag gestartet wurde aber vor dem 'A' geendet ist.

    hth...

  4. hi,

    falls es nur um das schliessen des formulars geht, dann benutze doch das ereignis form_unload. in diesem kannst du ein flag abfragen, welches du nur beim click auf deinen "schliessen-knopf" setzt...

    ansonsten gibt es noch die eigenschaft controlbox, allerdings schaltet die auch das minimieren / maximieren ab.

    hth

  5. hi,

    mit

    CommonDialog1.Filter = "[I]*.txt (Textdateien)[/I]| [COLOR=blue]*.txt[/COLOR]"

    werden nur textdateien angezeigt. dabei ist *.txt (Textdateien) das was im Dialog angezeigt wird, und *.txt der eigentliche filter.

    das ganze wird mit pipe ( = "|" ) getrennt

    hth...

  6. hi,

    ok, zum mitdenken für mich:

    soll die excel-tabelle erweitert werden, oder mit jeder datei eine neue tabelle erstellt werden?

    bei neuen tabellen funktioniert der ansatz (s. link oben) ganz gut.

    wenn die bestehende excel-tabelle erweitert werden soll, müsste man die spaltenüberschriften abgleichen und erst die tabelle erweitern / reduzieren um danach den ansatz von oben durchexerzieren. allerdings darf man dann nicht mit der zelle A1 beginnen sondern mit der zelle in der ersten spalte in der letzten+1 spalte zeile.

    hoffe, das war versändlich, ansonsten fragen...

  7. hi,

    ich weiss ja nicht, der ganze illuminaten-paranoia-23 kram ist als film ja recht nett, aber nachdem ich "das foucaultsche pendel" von eco gelesen hatte, konnte ich darüber eigendlich nur noch lächeln.

    ist schon genial wie in dem buch ein zeitungkiosk in den weltplan des templerordens aufgrund seiner abmessungen eingebaut wird...

    gerade die zahlenmystiker können sich doch alles zurechrechnen

    nur meine bescheidene meinung...

  8. hi,

    man kann sehr wohl "normale" formulare in einer dll verwenden.

    lediglich der aufruf des formulars muss gekapselt sein:

    in der dll eine klasse definieren, welche das formular zur anzeige bringt.

    diese klasse kann dynamisch geladen werden und das formular anzeigen.

    so haben wir z.b. eine anwendung, deren programmteile sich in 6 dlls verteilen, wobei jede einzelne dll ein in sich geschlossenes programm beinhaltet.

    hth...

  9. hi, also bei mir ergibt folgender code

            cal.set(Calendar.YEAR, 2003);
    
            cal.set(Calendar.MONTH, 0);
    
            cal.set(Calendar.DAY_OF_MONTH, 31);
    
            System.out.println(cal.getTime().toString());
    
            cal.add(Calendar.MONTH, 1);
    
            System.out.println(cal.getTime().toString());
    folgende ausgabe:
    Fri Jan 31 19:10:46 CET 2003
    
    Fri Feb 28 19:10:46 CET 2003

    also imho korrekt...

    welches jdk benutzt du?

    wir haben 1.4 im einsatz. weiss allerdings nicht ob das in 1.3 evtl anders war.

    afair lieferte die methode calendar.roll(int field, int amount) saubere ergebnisse in 1.3

    hth

  10. hi christian,

    danke erstmal für die antwort.

    ich muss gleich sagen, ich bin kein dba und kenne mich mit dem dbms oracle auch eher aus sicht der anwendungsentwicklung aus.

    die hit ration habe ich noch nicht überprüft, war mir bis gerade eben auch kein wirklicher begriff.

    die ios habe ich über den systemmonitor festgestellt. da es hier um plattenzugriffe geht, vermute ich, dass es physical ios sind.

    über das tunen der statements muss ich mir erst noch einige gedanken machen (habe nur einen teil der anwendung selber entwickelt, den rest von kollegen üernommen)

    Ich würde large_pool_size erstmal wieder disablen und etwas auf large_pool_size draufschlagen.

    ich vermute, du meinst den shared pool vergrössern?

    den large pool habe ich wieder abgeschaltet und der shared pool vergrössert. das hat auch wirkung gezeigt.

    auf die 110 mb speicherbelegung im large pool kam ich durch auswertung der v$sgastat während eine abfrage lief. dort war der freie platz mit 40mb angegeben (150mb - 40mb = 110 mb)

    die ios sind weniger geworden, soweit richtig. allerding nicht völlig verschwunden. sind aber auch momentan nicht mehr im kritischen bereich.

    ca 1 sort-to-disc gegen 120 sort-in-memory (aus der v$sysstat).

    bugfixes werde ich mal überprüfen.

    nochmals danke, und wenn ich was herausfinde, melde ich mich... :-)

  11. hi,

    aus der access-hilfe durch suchen nach transaktion:

    Wenn die Eigenschaft UseTransaction einer Tabellenerstellungsabfrage, Löschabfrage, Anfügeabfrage oder Aktualisierungsabfrage auf Ja eingestellt ist, speichert die Microsoft Jet-Datenbank-Engine die zurückgegebenen Datensätze in einem Cache-Speicher und, sofern erforderlich, die Ergebnisse auf der Festplatte in einer temporären Datenbank. Sobald die Abfrage beendet wurde, liest die Jet-Datenbank-Engine die Datensätze aus der temporären Datenbank und schreibt sie zurück in die ursprüngliche Datenbank.

    damit kannst du sicherstellen, dass niemand in die angelegte temporäre tabelle einen datensatz einträgt, und du definitiv den von dir zuletzt eingefügten datensat mit "select max(id)" bekommst...

    transaktionen manuell starten (ebenfalls aus der access-hilfe):

    Syntax

    Einleiten einer neuen Transaktion.

    BEGIN TRANSACTION

    Abschließen einer Transaktion durch Übernehmen aller Aktionen, die während der Transaktion durchgeführt wurden.

    COMMIT [TRANSACTION | WORK]

    Abschließen einer Transaktion durch Zurücksetzen (Rollback) aller Aktionen, die während der Transaktion durchgeführt wurden.

    ROLLBACK [TRANSACTION | WORK]

    sollte das gewünschte ergebnis bringen...

  12. hi,

    entweder mittels

    "select test_id from test where vorname = 'Micha' and nachname = 'K'"
    oder mittels
    "select max(test_id) from test"

    wobei bei der zweiten möglichkeit sichergestellt sein muss, dass nicht in der zwischenzeit ein anderer datensatz eingefügt wurde...

    hoffe, es hilft...

  13. hi,

    umgebung:

    os aix 4.3

    dbms oracle 804

    problem:

    auf unserem datenbankserver wollte ich aus tuning-gruenden das speicher-verhalten optimieren.

    da bei grossen abfragen viele io-zugriffe durchgefuehrt wurden, habe ich den "shared pool" vergroessert, einen "large pool" und eine sort_area angelegt.

    aus der ini-datei:

    shared_pool_size = 48000000
    
    LARGE_POOL_SIZE = 150000000
    
    SORT_AREA_SIZE = 16000000
    
    SORT_AREA_RETAINED_SIZE = 0

    mit diesen einstellungen gab es keine io-zugriffe mehr, aber es kam nach einiger zeit zu nicht mehr freigegebenem speicherplatz im large pool

    ausserdem wurden bei einigen abfragen bis zu 110 mb speicher belegt.

    bei zwei grossen abfragen gleichzeitig kommt die fehlermeldung "ora-04031, unable to allocate 4160 bytes of shared memory"

    durch vergroesserung des shared_pool kann dies umgangen werden, aber da physikalisch nicht mehr hauptspeicher zur verfügung steht, paged er dann wieder und erzeugt io-zugriffe.

    nach dem zuruecksetzten der large_pool- und sort_area-werte laeuft die db (bisher) wieder stabil.

    frage:

    hat jmd schon einmal aehnliche erfahrungen gemacht?

    gibt es einstellungen, welche ich noch vornehmen kann, um die db dazu zu bekommen, abfragen im hauptspeicher durchzufuehren?

    danke im voraus

  14. hi,

    kann es denn sein, dass du zwei datensätze hast, die komplett identisch sind bis auf den pk? (das klingt fuer mich nach einem design-fehler...)

    wenn nicht, hast du doch die restlichen attribute des eingefügten datensatzes und kannst dir den pk zu diesem zurückgeben lassen.

    alternativ (nur wenn transaktionssicherheit gewaehrleistet ist) kannst du dir den maximal-wert der pk-spalte ausgeben lassen. dies ist der zuletzt eingefügt datensatz...

    hoffe, es hilft...

  15. hi,

    wenn man die funktion potenz so schreibt, wie si mathematisch definiert ist, geht das ganze recht einfach...

     
    
        private int potenz(int base, int exp){
    
            int ret = base;
    
    
            if(exp == 0){
    
                // x^0 is defined as 1
    
                return 1;
    
            }
    
            for (int i = 1; i < exp; i++){
    
                ret = ret * base;
    
            }
    
    
            return ret;
    
        }
    
    

    ich glaub das geht nur fuer positive zahlen, habs aber nicht ausprobiert...

    diese funktion einfach mit der (angegebenen) basis 10 mal mit jeweils erhoehtem exponenten aufrufen und es werden die korrekten potenzen zurueckgegeben.

    hoffe, es hilft...

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...