Magerquark.de

Aktuelle Beiträge

  • Verhalten von BOF und EOF in ADO

    Zurzeit habe ich die Aufgabe ein Microsoft-Access-VBScript-Projekt in eine moderne Ajax-ASP.NET-4.0-C#-Anwendung zu migrieren.

    Dabei stoße ich auf zahlreiche „seltsame“ Sachen die mit VBScript so möglich sind.

    Recordset.BOF und Recordset.EOF

    Eines davon ist die Logik der Eigenschaften „BOF“ und „EOF“ eines Recordsets.

    Laut Dokumentation gilt:

    BOF: Indicates that the current record position is before the first record in a Recordset object.
    EOF: Indicates that the current record position is after the last record in a Recordset object.

    Der Programmcode durch den ich mich arbeite verwendet die BOF-Eigenschaft häufig zum Prüfen ob Datensätze vorhanden sind oder nicht.

    Selbsttest

    Leider widersprechen sich Programmlogik und Kommentare manchmal, deshalb habe ich eine kleine Access-Datenbank mit einem Modul erstellt, das die verschiedenen Fälle durchspielt.

    Das Ergebnis ist wie folgt:

    =========================
    Test-Beginn

    —————
    SQL-Abfrage die einen Datensatz liefert (Count: 1)
    BOF: Falsch
    EOF: Falsch

    —————
    SQL-Abfrage die mehrere Datensätze liefert (Count: 2)
    BOF: Falsch
    EOF: Falsch

    —————
    SQL-Abfrage die keine Datensätze liefert (Count: 0)
    BOF: Wahr
    EOF: Wahr

    Test-Ende
    =========================

    D.h. sobald ein Datensatz vorhanden ist, sind sowohl BOF als auch EOF „false“, sonst jeweils „true“.

    Somit bedeuten folgende Prüfungen:

    If Recordset.BOF = False then –> Daten sind vorhanden
    If Recordset.BOF = True then –> Daten sind nicht vorhanden

    Download

    Damit Ihr es bei Interesse selbst mal ausprobieren könnt, gibt es hier die Access-Datei zum Download.

  • Millionen von Raupen in Esslingen

    Uah! Gruselig und sehr interessant: In Esslingen am Neckar haben wir beim Hundespaziergang lustige Bäume gesehen:

    Ein komplett weißer Baum. Beim genaueren Hinsehen waren dann Millionen (mindestens!) von Raupen darauf zu sehen:

    Es waren 1-2 Bäume komplett weiß, die links und rechts daneben hatten gar keine Raupen, sehr sonderbar. Ggf. waren es andere Bäume, so dass die Raupen deren Blätter nicht mochten.

    Ein Video habe ich natürlich auch noch gemacht:

    YouTube-Video abspielen

    Wohl bekommt’s!

  • Liebe

    Die Liebe meines Lebens rückt näher an und in mein Leben:

    Eine gar wunderbare Erfahrung!

    Was kommen wohl als nächstes für Schritte?

    • Heirat?
    • Haus?
    • Kinder?
    • Oder ganz was anderes?

    Wer weiß, was die Zukunft bringt, ich freue mich drauf!

  • Stochastik

    Heute eine Frage aus der Wahrscheinlichkeitsrechnung der Mathematik.

    Mein Freund der Rosenzüchter hat mir diese Frage gestellt, wohl um mich zu testen. Ich bin natürlich clever und betreibe Crowdsourcing.

    Hier die Aufgabe:

    Jäger

    Es gibt drei Jäger, von denen jeder beim Schießen eine andere Trefferwahrscheinlichkeit hat.

    • Jäger 1 trifft in 3 von 5 Fällen das Ziel (in 2 von 5 Fällen also nicht), hat also 60% Trefferwahrscheinlichkeit.
    • Jäger 2 trifft in 4 von 7 Fällen das Ziel (in 3 von 7 Fällen also nicht), hat also zirka 57% Trefferwahrscheinlichkeit.
    • Jäger 3 trifft in 1 von 10 Fällen das Ziel (in 9 von 10 Fällen also nicht), hat also 10% Trefferwahrscheinlichkeit.

    Reh

    Diese drei Jäger gehen zusammen auf die Jagd, sehen ein Reh und zielen alle auf das Reh um es zu erlegen.

    Wie hoch ist die gesamte Trefferwahrscheinlichkeit um das Reh zu treffen?

    Lösung?

    Wenn ich meinen Freund korrekt verstanden habe ist es keine Jux-/Fangfrage sondern rein über Wahrscheinlichkeit zu lösen.

    Wisst Ihr eine Lösung?

  • Eiermann

    Ja, ich gestehe, ich war mal Eiermann.

    So Anfang/Mitte der 1990er-Jahre, zusammen mit meiner damaligen Freundin, der Manuela.

    Es war zu Beginn meines Studiums und ich wollte mir ein Bisschen was dazuverdienen. Wie es der Zufall wollte, habe ich mitbekommen dass in Manzen ein Student regelmäßig wöchentlich Eier an einen festen Kundenkreis verkauft.

    Dieser Student wollte diesen Nebenjob aufhören und suchte einen Nachfolger. Ich habe mich dann „beworben“, wurde dann für gut befunden und durfte anfangen.

    Das Prinzip

    Die Idee bei der Sache war, dass man sich Eier in großen Mengen bei einem Hühnerhof/Bauern besorgte und dann an Privatkunden direkt an der Haustür verkauft.

    Der Anfang

    Beim ersten Mal ging ich dann zusammen mit meinem Vorgänger, der alle Leute und auch die Leute selbst gut kannte, von Haus zu Haus, schrieb mir alles auf, klingelte und verkaufte Eier.

    Bei jedem Klingeln wurde dann via Sprechanlage/Fenster oder auch persönlich gefragt: „Wie viele Eier brauchen Sie heute?“ und es kam dann eben eine Zahl zwischen 5 und 50 zurück, oder auch, dass diese Woche mal gar nichts benötigt wurde.

    Das hat dann alles gut geklappt und fortan machte ich das dann alleine.

    Jede Woche

    Fortan habe ich mich dann also entweder alleine oder zusammen mit der Freundin zunächst zum Hühnerhof nach Dürnau begeben, dort einen großen Karton Eier gekauft und sind dann in den Ort mit den Kunden gefahren.

    Anfänglich haben wir das Auto dann zentral geparkt und mit einem kleinen Handkarren und meinen Aufschrieben sind wir dann los gezogen.

    Wenn ich alleine war hat’s ein Bissle länger gedauert, waren wir zu zweit, haben wir parallel die Kunden besucht, was entsprechend schneller ging.

    Nach so ca. 2-3 Stunden haben wir dann alle Eier verkauft bzw. alle Kunden besucht und waren fertig. Die noch übrigen Eier wurden mit nach Hause genommen und selbst verzehrt oder an Freunde/Bekannte verkauft.

    Lukrativ?

    Leider kann ich mich nicht mehr genau erinnern, wie viel wir jeweils verdient haben an einer Tour, einige DM (ggf. 50-100?) werden es schon gewesen sein.

    Insgesamt haben wir fast ausschließlich die Bestandskunden bedient, ich glaube zu meinen, dass wir fast keine Neukunden gewonnen haben, wohl vor allem deshalb weil wir es nie groß versucht haben.

    Das langsame Ende

    Wir haben dass ggf. so 1-2 Jahre lang gemacht, groß Spaß gemacht hat es in meiner Erinnerung nie.

    Es war halt etwas um neben dem Studium Geld zu verdienen. Eigentlich wollte ich viel lieber programmieren, hatte damals aber weder Geschäftssinn noch Kunden noch genug Know-How/Erfahrung.

    Als es dann mit der Freundin damals auseinander ging (meine alleinige Schuld!), hat sie es selbst noch ein wenig weiter gemacht, und irgendwann dann auch aufgehört.

    Die Kunden wurden mit der Zeit auch weniger, irgendwie war die Zeit der Eier-Hauslieferungen wohl vorbei.

    Eine interessante Erfahrung war es auf jeden Fall!

  • NullReferenceException beim DataBind in ASPxGridView

    Heute habe ich nach ein paar Änderungen an einem funktionierenden ASPxGridView-Steuerelement auf einmal folgende Fehlermeldung erhalten, sobald der Anwender auf einen Hyperlink im Grid oder zum Sortieren auf eine Spalte geklickt hatte:

    Object reference not set to an instance of an object.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

    Source Error:
    Line 65: <dxgv:GridViewDataColumn Caption=“Actions“ VisibleIndex=“4″>
    Line 66: <DataItemTemplate>
    Line 67: <asp:LinkButton runat=“server“ Visible='<%#Eval(„CanContinue“)%>‘ OnCommand=“GridLinkButton_Click“ CommandArgument='<%# Eval(„ID“) %>‘ CommandName=“Continue“ Text=“Continue“ />
    Line 68: <asp:LinkButton runat=“server“ Visible='<%#Eval(„CanFinish“)%>‘ OnClientClick=“javascript:return confirm(‚Do you really want to finish this test run?‘);“ OnCommand=“GridLinkButton_Click“ CommandArgument='<%# Eval(„ID“) %>‘ CommandName=“Finish“ Text=“Finish“ />
    Line 69: <asp:LinkButton runat=“server“ Visible='<%#Eval(„CanDetails“)%>‘ OnCommand=“GridLinkButton_Click“ CommandArgument='<%# Eval(„ID“) %>‘ CommandName=“Details“ Text=“Details“ />

    Source File: c:\Users\ukeim\Documents\Visual Studio 2010\Projects\Zeta Test\Zeta Test Main\Source\WebMain\UI\TestPlansAndRuns\TestRuns\CurrentTestRuns.aspx Line: 67

    Stack Trace:

    [NullReferenceException: Object reference not set to an instance of an object.]
    ASP.ui_testplansandruns_testruns_currenttestruns_aspx.__DataBinding__control25(Object sender, EventArgs e) in c:\Users\ukeim\Documents\Visual Studio 2010\Projects\Zeta Test\Zeta Test Main\Source\WebMain\UI\TestPlansAndRuns\TestRuns\CurrentTestRuns.aspx:67
    System.Web.UI.Control.OnDataBinding(EventArgs e) +91
    System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +92
    System.Web.UI.Control.DataBind() +15
    System.Web.UI.Control.DataBindChildren() +201
    System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +101
    DevExpress.Web.ASPxGridView.GridViewBaseTemplateContainer.DataBind() +20
    DevExpress.Web.ASPxGridView.Rendering.ASPxGridViewRenderHelper.AddTemplateToControl(Control destination, ITemplate template, Control templateContainer, TemplateContainerCollection collection, Boolean doDataBinding) +194
    DevExpress.Web.ASPxGridView.Rendering.ASPxGridViewRenderHelper.AddDataItemTemplateControl(Int32 visibleIndex, GridViewDataColumn column, Control templateContainer) +211
    DevExpress.Web.ASPxGridView.Rendering.GridViewTableDataCell.CreateControlHierarchy() +109
    DevExpress.Web.ASPxClasses.Internal.InternalTableCell.CreateChildControls() +24
    System.Web.UI.Control.EnsureChildControls() +102
    DevExpress.Web.ASPxClasses.Internal.InternalTableCell.DevExpress.Web.ASPxClasses.Internal.IASPxWebControl.EnsureChildControls() +10
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers) +138
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers) +156
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers) +156
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control) +40
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.CreateChildControls() +49
    System.Web.UI.Control.EnsureChildControls() +102
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControls() +4
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.DevExpress.Web.ASPxClasses.Internal.IASPxWebControl.EnsureChildControls() +10
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers) +138
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers) +156
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers) +156
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control, Boolean skipContentContainers) +156
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControlsRecursive(Control control) +40
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.CreateChildControls() +49
    DevExpress.Web.ASPxClasses.ASPxWebControl.CreateChildControls() +142
    System.Web.UI.Control.EnsureChildControls() +102
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.EnsureChildControls() +4
    DevExpress.Web.ASPxClasses.ASPxWebControlBase.get_Controls() +21
    System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +24
    System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +225
    System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +148
    System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +225
    System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +148
    System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +225
    System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +148
    System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +225
    System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +148
    System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +225
    System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +148
    System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +225
    System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +148
    System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +225
    System.Web.UI.Page.LoadAllState() +312
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +747

    Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1

    Nachdem auf der Lauf im Debugger und „Bei Ausnahmen anhalten“ leider keine neuen Erkenntnisse gebracht hatten, bin ich durch diesen Artikel auf die Lösung gekommen:

    Im Init-Ereignis des GridView-Steuerelements habe ich die Eigenschaft SettingsPager.PageSize gesetzt. Diese Zuweisung an die Eigenschaft hat die (indirekte) NullReferenceException ausgelöst.

    Nachdem ich die Zuweisung entfernt hatte, lief alles wieder. Seltsam.