Zum Inhalt springen

Mcolli

Mitglieder
  • Gesamte Inhalte

    103
  • Benutzer seit

  • Letzter Besuch

Beiträge von Mcolli

  1. Bei einer betrieblichen Umschulung arbeitet man bei einer "richtigen" Firma und besucht man eine "richtige" Berufsschule.

    Man steigt halt im zweiten Jahr ein, schreibt keine Zwischenprüfung mit und kann sich das Berichtsheft sparen. That's it.

    Genau so war es bei mir und ich habe vor genau einer Woche die Umschulung abgeschlossen und das wohl auch besser als die meisten anderen Azubis. Das IHK-Abschlusszeugnis ist wie oben schon erwähnt identisch. Die Qualität hängt, wie bei der Ausblidung auch, von dem Betrieb ab, welchen man sich aussucht - ich habe mir gezielt Unternehmen ausgesucht und nach 3 Bewerbungen 2 Zusagen bekommen.

    Ich wollte aber noch folgendes anmerken:

    Um eine solche (betriebliche) Umschulung machen zu können muss man entweder schon eine (nicht IT bezogene) Ausblidung abgeschlossen haben oder min. x Jahre sozialversicherungspflichtig gearbeitet haben - so heißt es. De facto wurde ich z.B. auch ohne eine dieser Anforderungen zu erfüllen als Umschüler vom Amt zugelassen. Man muss halt ein bisschen argumentieren aber die lassen auf jeden Fall mit sich reden.

  2. Ich habe erfolgreiche eine betriebliche Umschulung zum FIAE absolviert. Diese wurde vom Arbeitsamt getragen und hat 2 Jahre gedauert. Man steigt in diesem Fall im 2. Ausbildungsjahr ein. Ich würde Dir auf jeden Fall zu dieser Form der Umschulung raten (betriebliche).

    Das Vorgehen dabei ist, dass Du Dich mit dem Arbeitsamt einigst, dass die Dich bei dieser Form der Umschulung stützen. Dazu ist es nötig ALG 1 ode ALG 2 zu beantragen. Anschließend musst Du einen ausbildenden Betrieb selber finden. Dazu solltest Du nach Betrieben ausschau halten, die aktuell reguläre Ausbildungsplätze anbieten. Für den ausbildenden Betrieb hat dass den Vorteil, dass dieser Dein Auzubi Gehalt einspart (Du kriegst HARTZ IV vom Amt) und evtl. anfallende Kosten zu Einrichtung eines Arbeitsplatzes auch von Amt bezahlt bekommt.

    Dass Du nur "Hartz IV" kriegst mag erstmal etwas hart klingen es kommt dabei allerdings auf Deine persönliche Situation an. Wenn Du selber für Miete aufkommen musst und Fahrtkosten zum Arbeitsplatz gelten machen kannst sowie ggf. noch Kinder hast, könnte es sein dass Du damit sogar besser gestellt bist als mit einem guten Azubi Gehalt (ca. 900 brutto).

    Der Abschluss ist identisch mit dem einer regulären drei Jahre dauernden Ausbildung. In einem Vorstellungsgespräch würde ich den Fokus darauf legen, dass Du Dich zum FISI berufen fühlst und die Welt auf einen wie Dich gewartet hat - evtl. ein wenig anders formuliert :)

  3. Ich hatte einen Deal mit meiner Mutter:

    Vor der Prüfung einen Maßanzug und nach der Prüfung noch einen :)

    Den einen hatte ich dann auch heute an. Ich muss dazu sagen, dass ich gerne auch in meiner Freizeit Sport-Sakkos trage und auch gerne einen Anzug anziehe - wenn der Anlass es zu lässt. Abgerundet habe ich das ganze mit einer nicht ganz förmlichen Krawatte.

  4. Auf einen Samstag sind die Ergebnisse online gegangen:

    Fachquali: 89% (arg)

    Kernquali: 80% (arg²)

    Wiso: 66% (war irgendwie klar ... nur geraten)

    Alles in Allem laut des Notenrechners wohl 81% (juhu)

    Habe heute auch meine Präsentation in Essen gehabt. Bin sehr zu frieden:

    Projektdokumentation: 92%

    Präsentation/Fachgespräch: 93%

    Gesamt daher auf 87% aufgewertet.

    Bei der Präsentation wurden mir (zu erst) Fragen von demjenigen Prüfer gestellt, welche auch meine Doku bewertet hatte. Die Fragen die dieser hatte konnte ich lange Ausführen - weil es dazu viel zu berichten gab. Damit war die Zeit für das Fachgespräch auch schon beendet. Die mir gestellten Fragen waren dabei auch so gewählt, dass der Prüfer davon ausgehen musste, dass ich diese sicher beantworten kann. In der Hinsicht TOP Verhalten des Prüfers.

  5. Grob gesagt kannst Du zwei Klassen verwenden:

    System.Threading.Timer

    System.Timers.Timer

    Problematisch ist die Threadsicherheit.

    Ich umgeh das immer in dem ich ein delegate definiere und dann im Handler für den Timer eintrage dass "this" ein delegate mit der Methode in der was passiert "invoken" soll.

    Ich hab Dir nen Samplecode geschustert:

    Klasse Programm

    
    delegate void EnshureThreadSafty();
    
    static class Program
    
    {       
    
    [INDENT]/// <summary>
    
    /// Der Haupteinstiegspunkt für die Anwendung.
    
    /// </summary>
    
    [STAThread]
    
    static void Main()
    
    {
    
    [INDENT]Application.EnableVisualStyles();
    
    Application.SetCompatibleTextRenderingDefault(false);
    
    Application.Run(new Form1());[/INDENT]
    
    
    }[/INDENT]
    
    }
    
    
    Klasse MyGame
    
        class MyGame
    
        {
    
            public int AValue;
    
            public MyHero theHero;
    
            public System.Timers.Timer GlobalCoolDown = new System.Timers.Timer(5000);
    
            public MyGame()
    
            {
    
                GlobalCoolDown.Elapsed += new System.Timers.ElapsedEventHandler(GLOBAL_COOLDOWN_Elapsed);
    
                AValue = 1;
    
                theHero = new MyHero();
    
                GlobalCoolDown.Start();
    
            }
    
    
            void GLOBAL_COOLDOWN_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    
            {
    
                AValue += AValue == Int32.MaxValue
    
                            ? 0
    
                            : 1;
    
            }
    
        }
    
    
    Klasse MyHero
    
        class MyHero
    
        {
    
            public System.Threading.Timer ActionCD;
    
            public bool Ready4Action;
    
    
            public MyHero()
    
            {
    
                Ready4Action = true;
    
                ActionCD = new System.Threading.Timer(
    
                    new System.Threading.TimerCallback(actionCD_Elapsed), null,0, 10000);    
    
            }
    
    
            /// <summary>
    
            /// Bereit den Helden auf eine neue Aktion vor.
    
            /// </summary>
    
            /// <param name="sender">nicht relevant</param>
    
            /// <param name="e">nicht relevant</param>
    
            void actionCD_Elapsed(object state)
    
            {
    
                this.Ready4Action = true;
    
            }
    
    
            /// <summary>
    
            /// Führt eine Action aus wenn der Held bereit ist.
    
            /// </summary>
    
            public bool PerformAction()
    
            {
    
                bool actionPerformed = false;
    
                if (Ready4Action)
    
                {
    
                    Ready4Action = false;
    
                    //DO Action
    
                    actionPerformed = true;
    
                }
    
                return actionPerformed;
    
            }
    
        }
    
    
    Klasse Form1
    
        public partial class Form1 : Form
    
        {
    
    
            private MyGame theGame;
    
            public Form1()
    
            {
    
                InitializeComponent();
    
                theGame = new MyGame();
    
                theGame.GlobalCoolDown.Elapsed += new System.Timers.ElapsedEventHandler(GLOBAL_COOLDOWN_Elapsed);             
    
            }
    
    
            void GLOBAL_COOLDOWN_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    
            {
    
                this.Invoke(new EnshureThreadSafty(writeOutput));
    
    
            }
    
    
            private void but_action_Click(object sender, EventArgs e)
    
            {
    
                if (!theGame.theHero.PerformAction())
    
                {
    
                    lb_output.Items.Add("Held nicht bereit");
    
                }
    
            }
    
    
    
            private void writeOutput()
    
            {
    
                lb_output.Items.Add("Global CD abgelaufen. Wert von theGame.AValue ist nun: " + theGame.AValue);
    
                lb_output.Items.Add("Global CD abgelaufen. theGame.theHero.Ready4Action = " + theGame.theHero.Ready4Action);
    
            }
    
    
    #region Vom Windows Form-Designer generierter Code
    
    
            /// <summary>
    
            /// Erforderliche Methode für die Designerunterstützung.
    
            /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    
            /// </summary>
    
            private void InitializeComponent()
    
            {
    
                this.lb_output = new System.Windows.Forms.ListBox();
    
                this.but_action = new System.Windows.Forms.Button();
    
                this.SuspendLayout();
    
                // 
    
                // lb_output
    
                // 
    
                this.lb_output.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
    
                            | System.Windows.Forms.AnchorStyles.Left)
    
                            | System.Windows.Forms.AnchorStyles.Right)));
    
                this.lb_output.FormattingEnabled = true;
    
                this.lb_output.Location = new System.Drawing.Point(12, 12);
    
                this.lb_output.Name = "lb_output";
    
                this.lb_output.Size = new System.Drawing.Size(552, 368);
    
                this.lb_output.TabIndex = 0;
    
                // 
    
                // but_action
    
                // 
    
                this.but_action.Dock = System.Windows.Forms.DockStyle.Bottom;
    
                this.but_action.Location = new System.Drawing.Point(0, 399);
    
                this.but_action.Name = "but_action";
    
                this.but_action.Size = new System.Drawing.Size(576, 23);
    
                this.but_action.TabIndex = 1;
    
                this.but_action.Text = "Action";
    
                this.but_action.UseVisualStyleBackColor = true;
    
                this.but_action.Click += new System.EventHandler(this.but_action_Click);
    
                // 
    
                // Form1
    
                // 
    
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    
                this.ClientSize = new System.Drawing.Size(576, 422);
    
                this.Controls.Add(this.but_action);
    
                this.Controls.Add(this.lb_output);
    
                this.Name = "Form1";
    
                this.Text = "Form1";
    
                this.ResumeLayout(false);
    
    
            }
    
    
            #endregion
    
    
            private System.Windows.Forms.ListBox lb_output;
    
            private System.Windows.Forms.Button but_action;
    
        }
    
    
    
    

  6. Guten Tag,

    evtl kann mir ja einer von den geschätzen Kollegen, die sich mit Informatik zum anfassen beschäftigen weiter helfen.

    Es geht um die Einrichtung eines Heimnetzwerkes bei der bereits vorhandene Komponenten genutzt werden sollen.

    Ich habe drei Komponenten zur Verfügung

    1. Fritz!!Box Fon WLAN 6360 (Muss Basis Station werden)
    2. Speedport W720 V (Telekom)
    3. Fitz!WLAN Repeater N/G

    Die Situation ist, dass es zwei Räume gibt in denen Clientgeräte stehen die ans müssen und eine Kabelfindung der Räume nicht möglich ist die WLAN Leistung aber nicht stark beeinträchtigt.

    1. Wohnzimmer:

    Hier befindet sich der WAN/Telefon Hausanschluss und kann nicht verlegt werden. Hier soll die Fritz!Box 6360 aufgebaut werden. Zu dem ist hier noch eine Playstation 3 die per WLAN oder LAN angeschlossen werden soll.

    2. Arbeitszimmer:

    Hier befindet sich der PC sowei eine Drucker/Fax Combigerät. Das Combigerät muss per Kabel ans Netzwerk angeschlossen werden und der PC nach Möglichkeit auch. Die einzig verbleibende Netzwerkkomponente mit Kabelanschlüssen ist der Speedport W720, daher muss der wohl auch hier her.

    Mein Problem besteht jetzt darin zwichen den dem Speedport und Fritz!Box eine WLAN gestütze Verbindung herzustellen. Den Repeater konnte ich bereits erfolgreich an der Fritzbox Anmelden und die Client System PC Fax und PS3 wären auch kein Problem.

    Eine Anmeldung des Repeaters mittels WPS ist bei der FritzBox 6360 nicht geglückt, obwohl das laut den Konfigurationoptionen beider Geräte wohl möglich sein Sollte.

    Bei Meinen Recherchen im InterNETZ habe ich rausgefunden dass die Fritz!Box 6360 wohl keinen sogannten "Repater" Modus hat der etwas was WDP heisst nutzt und somit eigentlich kein Repeater damit verwendet werden kann .... bis die erste Firmware raus kommt.

    Meine Fragen daher:

    Wo ist der unter schied zwichen WLAN Bridge, Access Point und Repater.

    Welche Option davon soll ich nutzen.

    Gibt es noch andere Optionen mit den Geräten

    Wenn die Fritz!Box keinen Repeater Modus anbietet, der aber nötig ist / sein soll um einen Repeater dort anzumelden, wieso klappt die Verbindung mit dem Firtz!WLAN Repeater dann.

    Technische Details bezüglich der verschieden Infrastrukturen würden mich auch interessieren .... wenn nicht in einem Studium derer ausartet.

  7. Junge Junge,

    das ist mal was wo man länger über das Vorgehen als über die Formulierung nachdenken muss, und der flashpixx hat sich auch schon was überlegt :)

    Aus mathematischer Sicht denke ich, dass flashpixx da richtig liegt und Du mit der Projekttion deiner Geraden rechnen kannst.

    Die Genauigkeit bei der Rechnung sollte meiner Meinung aber deutlich geringer als vermutet sein, da Du das ganze ja bestimmt auf einem Bildschirm darstellen willst un es so nur auf 1 Pixel Genauigkeit ankommt da, 0,1 Pixel ja nicht darstelllbar sind.

    Bei dieser Aussage gehe ich davon aus, dass Du, wie bei Voxel wohl üblich, keine Farbkorrekturen der Pixel à là AA machen willst. (ich kenn mich da aber nur "Bild-Leser" mäßig aus)

  8. Dokumentation auf MSDN lesen hilft immer:

    If a device identifier is used, then the result of the waveOutSetVolume call applies to all instances of the device. If a device handle is used, then the result applies only to the instance of the device referenced by the device handle.

    waveSetOutVolume Dokumentation

    Den Identifier des Sounddevices müsstetst Du mit WMI kriegen können.

    Wie das gemacht erfährt man hier:

  9. Also ich hab mir gerade mal das cUrl gedöns angeguckt aber keine Zeit mich mit deren Anwendung auseinander zu setzen. Wenn Du weist wie das cUrl.exe funktioniert ist das in c# ein Kinderspiel. Mit der Methode

    Process.Start(string);

    kannst Du einen Commandozeilen Befehl ausführen.

    Process.Start("ipconfig.exe -all");

    listet also die Netzwerk Configuration deines Rechners auf.

    Das wirste aber nicht sehen können, da das Kommandozeilenfenster sich wieder schließt nach Ausführung.

    Ist in Deinem Fall auch nicht nötig. Soweit ich das bei der cUrl.exe Dokumentation überflogen habe kannst Du mit dem Parameter -o eine Datei für den Output angeben. Die kannste dann ja in C# einlesen und Dir entsprechend des Ausgabeformates und Deines Objektmodells, da dann Instanzen von evtl. Benötigten Klassen basteln.

  10. Genau das ist das was ich will.

    Habs etz provisorisch gelöst, indem ich die datei anleg und nachdem die datei wieder geschlossen wird, sie wieder lösche. Mal schaun vielleicht find ich noch ne alternative

    Problematisch wirds halt wenn der User das Programm abschießt bevor die entschlüsselte Datei gelöscht wird.

    Ich hab damit zwar noch nicht pers. gearbeitet allerdings meine ich, dass Dir die Klasse MemoryMappedFile weiterhelfen kann. Diese wird normalerweise benutzt um Dateizugriffe zu beschleunigen und sollte von der Handhabung einer normalen File ähnlich sein.... musste halt selber mal schauen ob das für Deine Zwecke geht.

  11. Nach kurzem nicht gründlichen Überlegen bin ich zum Schluss gekommen, dass diese Funktionen den niedrigsten Funktionswert, den die endlichen Folge A[m] im Intervall [a,b] hat sucht.

    Es können im Endeffekt nur 2 Werte zurückgegeben werden:

    1. A[m] (evtl. nach mehrmaligen rukursiven Aufruf)

    2. PLUS_UNENDLICH

    letzteres ist nur dann der Fall wenn beim ersten Funktionsaufruf ein ungültiges Intervall [a,b] angegeben wurde -> die linke Intervallgrenze a ist größer als die rechte b.

    Desweiteren gilt IMMER

    a <= m <= b

    A[m] wird dann zurückgegeben wenn weder "links" noch "rechts" von m ein kleiner Wert der Folge existiert.

    Wenn A[m] kleiner als der niedrigste Wert "links" von m ist wird der kleinste Wert "rechts" von m zurückgegeben.

    Wenn A[m] kleiner als der niedrigste Wert "rechts" von m ist wird links nach dem kleinsten wert gesucht.

  12. Deine schreibweise des Statements nehme ich auch für gewöhnlich, da diese für mich intuitiver ist. Du musst bei Verwendung der "Count" Funktion allerdings nach alle gelisteten Spalten Ggoupieren.

    Bei Oracle und SQL-Server macht die Serverseitige Abfrageoptimierung ausserdem aus dem Statement ein

    SELECT COUNT(*) AS Summe, a.Datum AS 'Datum von A', b.Datum AS 'Datum von B'

    FROM Tabelle1 AS a CROSS JOIN

    Tabelle2 AS b

    WHERE (NOT (a.Datum = b.Datum))

    GROUP BY a.Datum, b.Datum

    ORDER BY 'Datum von A'

    Mit outer/inner/left/right joins kann man abgesehen von performanteren Statements auch die ergebnise besser steuern.

    .net?

    ...

    Meiner Meinung nach eine sehr schöne Zusammenfassung. Wobei man als Programmieranfänger nicht alles verstehen muss bzw. sollte.

    Nicht desto trotz, zu F# noch ein Detail:

    Im Gegensatz zu objektorientierten Sprachen haben funktionale einen für manche Zwecke entscheidenden Vorteil, sie können eine Endrekursion frühzeitig auflösen. D.h. die unnötige Speicherreservierung für Variablen pro Methodencall und das Vorhalten der Aufrufreihenfolge im "Call Stack" wird bei erkannter Endrekursion übergangen. Gerade für Analysen einer Baumstruktur ist dies vom Vorteil.

    Ich pers. würde dem Threadersteller allerdings dazu raten, C# als eine, als Java Deriviat anzusehende, objektorientierte Sprache zu betrachten, die ausschließlich für Windows und dessen Mobil-Ableger gegeignet ist. Statt dessen solltest Du Dich mit wirklich WICHTIGEN Sachen, was das objektorientierte Programmieren angeht, beschäftigen.

    Imo sind das Fragen wie:

    - Was bedeutet "MVVM" und "MVC" - Pattern

    - Factory Pattern

    - Prototype Pattern

    u.v.m. Patterns.

    Zudem könnte man sich, zur Oberflächengestalltung für Windowsanwendungen, DIREKT mit "WPF" beschäftigen, statt den Umweg über Windows.Forms bzw. Java.Swing zu gehen. Diese beiden verhindern eher ein tieferes Verständnis für WPF, und somit (imo) zukunftsweisender Oberfächengestalltung..... wer schonmal einen Progressbar, der auch wirklich Progress hat, unter Windows.Forms gemacht hat oder auf reaktive Anwendungen steht weiss was ich meine.

  13. Moin,

    ich kann Dir nur empfehlen die Enterprise Library von Microsoft für Datenbankzugriffe verwenden. Ich habe das schon öfter in diesem Forum erwähnt. Schau mal den Artikel für Dein Problem an. Evtl kann Dir das ja schon für Dein Problem helfen.

    Ich schreibe schon seit längerem ein Entlib Tutorial - hatte aber in letzter Zeit keine Zeit das fortzusetzen ... in der nächsten Woche sollte allerding für Datenbank zugriffe ein Tutorial hier entstehn.

  14. So auf die Schnelle:

    Die Klasse Programm muss so aussehen:

    
        static class Program
    
        {
    
    
            private delegate void ShowForm(Form frm);
    
            private delegate void CloseForm(Form frm);
    
            private static event ShowForm ON_SHOWFORM;
    
            private static event CloseForm ON_CLOSEFORM; 
    
            private static List<Form> APP_FORMS = new List<Form>();
    
    
    
            private static void ShowFormHandler(Form frm)
    
            {
    
                frm.Show();
    
                APP_FORMS.Add(frm);
    
            }
    
            private static void CloseFormHandler(Form frm)
    
            {
    
                APP_FORMS.Remove(frm);
    
                if (APP_FORMS.Count == 0)
    
                {
    
                    Application.Exit();
    
                }
    
            }
    
    
            public static void REQUEST_CLOSEFORM(Form frm)
    
            {
    
                ON_CLOSEFORM(frm);
    
            }
    
            public static void REQUEST_SHOWFORM(Form frm)
    
            {
    
                ON_SHOWFORM(frm);
    
            }
    
    
            /// <summary>
    
            /// Der Haupteinstiegspunkt für die Anwendung.
    
            /// </summary>
    
            [STAThread]
    
            static void Main()
    
            {
    
                ON_SHOWFORM += new ShowForm(ShowFormHandler);
    
                ON_CLOSEFORM += new CloseForm(CloseFormHandler);
    
                Application.EnableVisualStyles();
    
                Application.SetCompatibleTextRenderingDefault(false);
    
                ON_SHOWFORM(new Form1());
    
                Application.Run();
    
            }
    
    
    
        }
    
    
    Und ein Fenster muss das "FormClosing" Event so umsetzen:
    
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    
    {
    
        Program.REQUEST_CLOSEFORM(this);
    
    }      
    
    
    Und ein Aufruf von nem neuen Fenster muss so aussehen
    
    private void but_open_Click(object sender, EventArgs e)
    
    {
    
        Program.REQUEST_SHOWFORM(new Form2());
    
    }
    
    

    Dadurch dass man Events called wird der Programmfluss nicht behindert. Durch "Application.Run()" ohne Parameter läuft das Programme solange bis "Application.Exit()" aufgerufen wird. Die Liste mit den Fenster dient nur dazu festzustellen wann das Programm beendet werden kann.

  15. Ich habe Dir mal ne simple TextLogging Library geschrieben. Wenn es ein RuntimeError sein sollte, und auf dem Zielrechner kein Visual Studio installiert ist wird das Debuggen ja meisten schwer. Da schaft die Bibilothek Abhilfe.

    Du solltes halt an Schlüsselstellen im Code Logeinträge erzeugen.. sowie bei Abgefangen Expcetions. Mittels

    
    #if debug
    
    // Loggen
    
    #endif
    
    

    wird das loggen dann auch nur bei der Debug Version ausgeführt.

    Wenn Du den Verweis auf die Bibilothek gesetzt hast in deinem Projekt kannst Du den entsprechenden Namespace in Klassen referenzieren und mittels der statischen Klasse "MyLittleTxtLogger" Logeinträge in eine zuvor zu bennende Datei in einem ebenfalls zu bennenden Pfad schreiben.

    Dazu hast Du 2 Methoden:

    1. public static void WRITE_INFO(String)

    Schreibt einfach den String in die Logdatei

    2. public static void WRITE_Error(String, Exception)

    Schreibt den String mitsammt der Expcetion in die Logdatei

    Du kannst einige Properties Auslesen, die die Datenstruktur eines Eintrags deffinieren, sowie selber für je Error und Info eine Prefix hinterlegen.

    Zur weiteren Verarbeitung ist die Klasse "FileEntry" sowie die Methode public static List<FileEntry> RETRIEVE_ENTRIES() der klasse MyLittleTxtLogger da.

    Am besten schauste Dir die Demo Anwendung an die ebenfalls beiliegt.

    SimpleLogging.zip

  16. Stored Procedures würde ich nicht als Zirkus bezeichnen :roll:

    Zum Thema SQL-Parameter:

    SqlParameter-Klasse (System.Data.SqlClient)

    gibt es auch für OleDb.

    war auch mehr eine Verunglimpfung des Ganzes um jemandem, der das ganze noch nicht kennt, die sache ein bischen schmackhaft zu machen .... rein rethorisch.

    Stored Procedures sind - meiner bescheidenen Meinung nach - das Mittel der Wahl wenn es um wiederkehrende Datenbankabfragen bzw. Datenmanipulationen in objektorientierten Sprachen geht.

    Leider stößt das sehr oft auf Ablehnung weil es nunmal einfacher ist in der gewohnten Programmiersprache mittels Komfort-funktionen was Zeichenketten anbelangt das ganze zu realisieren.

    Dafür kann man auch (wenn man die Enterprise Library benutzt) das ganze Mittels App.cofig und Stored Procedures so gestallten, dass man einfach von Access auf MySql auf Oracle und zum schluss beispielshalber auf MS-SQL Server, oder wie auch immer, migrieren kann.

  17. So wie ich das verstanden habe lässt sich das durch 2 Möglichkeiten gut realisieren.

    1. Stored Procedure in der Datenbank.

    Letzten Endes hast Du ja "x" Felder in deiner Suchabfrage, die für das Filtern der Datensätze ("Where"-Clausel) in Frage kommen. Und somit hast Du auch "x" Textboxen oder Ähnliches in der Maske für den User.

    Die Stored Procedure in der Datenbank legst Du mit "x" Parametern + einen "Out Parameter"(der die Daten am Ende beinhaltet" an.

    Dann holst Du Dir in dem Part wo das Suchen gestartet wird die "Stored Procedure" aus der Datenbank und füllst die Parameter mit den Usereingaben bzw. leeren Strings / Zahlen.

    In der Stored Procedure schreibst Du auf Datenbankebene dann die Abfrage so, dass nur die nicht leeren Parameter zum Filtern verwendet werden.

    Der ganze Zirkus hat den Vorteil dass Veränderung in der Tabellenstruktur oder Suchlogik nicht zwangsläufig zum Neu-Ausrollen der Software führen.

    2. Du abreitest in deiner Suchabfrage mit Parametern

    Siehe dazu z.B.:

    Formatting Strings

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...