2016-07-19 8 views
1

Ich würde gerne wissen, was ist der beste Ansatz in Bezug auf Mischen, SQL & VBA. Weil ich gerade an einer riesigen Anwendung arbeite, die sich wahrscheinlich in Zukunft entwickeln wird und ich mich frage, ob ich richtig gemacht habe.Access & VBA, was ist die beste "Architektur" für eine große, skalierbare Anwendung

Ich habe mich entschieden, die meisten meiner SQL-Abfragen in unabhängigen VBA-Modulen "hart zu codieren", nur Werte von Kriterien (für SELECT/DELETE) oder Felder (für INSERT/UPDATE) als Parameter. Zuerst fand ich dies bequem, da ich nur einen Prozeduraufruf in meinem Formularcode machen musste und nur die gewünschten Werte meiner Steuerelemente übermittelte.

Aber das Problem ist, dass, wenn ich ein neues Feld hinzufügen, meine Tabelle umbenennen oder ein Feld umbenennen, werde ich alle Anfragen in Bezug auf diese Tabelle nacheinander neu zu schreiben ... Das ist ziemlich ärgerlich

Ich möchte zu wissen, ob es eine "Standardarchitektur" gibt, um bequem mit einer skalierbaren Anwendung in Access zu arbeiten?

Mit skalierbar meine ich die Datenbank selbst UND die Anwendungslogik.

+2

Wenn Sie eine große, skalierbare Anwendung möchten, ist mein Vorschlag, Access und VBA überhaupt nicht zu verwenden. Stattdessen: benutze C# und SQL-Server. –

+0

Danke für Ihre schnelle Antwort, ich wusste, dass Access nicht das beste Tool für diese Art von Bewerbung ist, aber ich hatte keine Wahl, ich bin in einem Praktikum und arbeite mit MS Access. Ich brauche keine extrem robuste Architektur, nur eine Möglichkeit, den Code etwas wartungsfreundlicher zu machen und nicht auf kleine Änderungen vollständig zu reagieren ;-( – LostReality

+0

Ich stimme direkt mit SQL Server und einer Sprache überein, die nicht darin enthalten ist, wie .net vb/C#. Ihre Frage scheint sich jedoch zu widersprechen, Sie sagen, Sie übergeben die Argumente für Aktionen, aber wenn Sie Parameter übergeben, dann sind dies sicher Felder, die es erfordern, und neue Felder erfordern Inspektion/Code-Änderung.Wenn Sie eine ADO-Verbindung verwenden, können Sie das DB-Schema öffnen, um Details zu Tabellen und Feldern usw. zu erhalten. Sie könnten also mit vorangestellten Feldern arbeiten, also UP_Firstname, um dann das Schema zu öffnen und Feldnamen mit UP_-Bedeutung zu erhalten aktualisierbar .. –

Antwort

3

... das Problem ist, dass, wenn ich ein neues Feld hinzufügen, umbenennen meinem Tisch oder ein umzubenennen, muss ich alle Abfragen neu zu schreiben über das, Tisch eins nach dem anderen

I empfehlen, dass Sie QueryDef Objekte (gespeicherte Abfragen) verwenden, anstatt den SQL-Anweisungstext in Codemodulen beizubehalten.

Wenn Sie dann Abfragen haben, die auf einen Tabellen- oder Feldnamen verweisen, der später geändert wird, müssen Sie nicht notwendigerweise manuell angeben, welche Abfragen überarbeitet und einzeln bearbeitet werden müssen. Sie könnten etwas wie swapTblNamesInQueryDefs() verwenden. Ich habe das für Tabellennamen geschrieben, aber es sollte auch für Feldnamen funktionieren.

Wenn Sie Ihre SQL-Anweisungen weiterhin in Codemodulen aufbewahren, können Sie etwas ähnliches mit find & ersetzen. Eine mögliche Komplikation ist jedoch, dass das Ersetzen von Wörtern nicht nur auf SQL-Anweisungstexte beschränkt ist. Das ist ein Problem, wenn das Zielwort an anderer Stelle in Ihrem VBA-Code vorhanden ist, aber diese Ereignisse nicht ersetzt werden sollen. Das ist kein Problem, wenn Ihr SQL in QueryDef Objekte ist.

Das Hinzufügen neuer Felder ist schwieriger. Sie könnten swapTblNamesInQueryDefs() in DisplayOnly Modus verwenden, um die SQL aus Abfragen zu untersuchen, die den Namen der geänderten Tabelle enthalten. Ich sehe jedoch keinen automatisierbaren Weg, um festzustellen, welche dieser Abfragen geändert werden sollte und die erforderlichen Änderungen vorzunehmen.