Access -> SQL server

4 отговора 532 прегледа
#1

Access -> SQL server

Здравейте всички. Реших че тук мога да получа компетентен съвет по един проблем. Може би малко лаишки и неточно ще прозвучи обяснението ми за което моля предварително за извинение.
Да започна с малко предистория. Общо взето сценария е тривиален - приложение на Access, после го цепнах на 2 - това с таблиците на файловия сървър и дойде момента за повечко хора да го ползват. И както се знае файлчетата на Access нарастват доста над реалния си размер, когато се ползват активно. Номера с автоматичния compact and repair при изход не става за файла с таблиците по обясними причини. Да не говорим за такива неща като автоматичен backup и прочее.
И съвсем логично ми влезе мухата за SQL сървърче. От тук нататък варианти много. Първоначалната идея беше да ползвам ODBC-то и пак само да линквам таблици.

Вариант1 - mySQL се издъни на ODBC драйвера (последната 5та мисля версия). Момчетата от Microsoft добре са се постарали да го направят неработещ с последните updates на Windows XP. По стария драйвер (3 нещо си) даже не вадеше съобщение за грешка. Абе с две думи колкото и да ми беше симпатичен го зарязах.
2.MS SQL 2005 Еxpress почти го направих ама заби на най-важната процедура за insert на рекорд в таблицата. Как ли не го мъчих. И през JetEngine и през DirectWorkspace не стана. В единия случай каза че базата била Read Only (а не е!!!), a в другия вади едно ODBC Call fail и това е. Сега аз знам че има начин да го трейсваш, какво точно забива ама в толкова дълбоки води засега не съм се научил да плувам. Все пак само от 3 месеца се занимавам по активно с тая тема.

В момента работя по варианта Microsoft Project. Няма ODBC-та, ADO вместо DAO(промените в кода се преглъщат), казват било по-ефективно. Едно само е гадното. В клиентския интерфейс показвам списък който може да се филтрира. Това го правя на база едно query на което динамично му сменям данните в критерия и после requery. Много е удобно, не се пише код само се взима стойност от combo box-a и филтрите работят без проблем. Да ама като минах на Project - query-тата ми хоп заминаха . Аз си ги преписах чинно като views на сървъра обаче тънкия момент с четенето на combo box тука не върви. Мога ли да предавам combo-то към сървъра по някакъв начин или генерално трябва да сменям концепцията.
Много ще съм благодарен за коментари и съвети по темата. Сега съм се хванал с много варианти наведнъж а предвид малкия ми опит може би някои от тях не си заслужават. ODBC подхода е като че ли по-универсален, но май е по-неефективен и особено в моя случай с оная процедура дето ме спъна........
MS Projecta е по оптимизиран, но филтрите не знам как да ги направя.
Ако някой се заинтересува в детайли мога да дам кодa на VB дето забива гадината.

Отговор
в отговор на Kalistro #2

Re: Access -> SQL server

zdravei Kalistro,

ne si razbutvai VB-coda, tova stava i po drug natchin:
VB- Programm sas vsitchki datai slagach v C:\ v MS SQL-Server.
Otvarjasch Enterprise Manager-->Data Transformation Services->nov DTS-Paket-> ima edin Task Prozess Start(rabotja na nemska systema, na balgarski moje i da e po drugo..)
->otvarjasch go-> Win32-Prozess:pichech Pfad(do kadeto VB-exe se namira) no v nikakav sluchai UNC-Pfad,
Za filtrite, zavissi kakvo ti trjabva,ili go programirasch kato parametar i go davasch v konsole na Win32- Prozes(стойност от combo box-a) ili otdelno sas nov Task(Task SQL-Start) koito izvarchva tvoeto query v sledstvie na privklutchenata programa (svarzvat se s workflow-zeleno) i oschte edin Task za requery po saschtia natchin.

Takmo se seschtam i za drug Variant no chte mi otneme mnogo vreme....

Ako savsem ne se opravich chte ti pratja njakolko screenshots na gotovi DTS-Paketi

Pozdrav Nea

Отговор
в отговор на nea #3

Re: Access -> SQL server

Zdravej Nea,

Blagodaria za ideite i vnimanieto. Ste probvam i ste pi6a kakvo e stanalo.

Take care!

Отговор
в отговор на Kalistro #4

Re: Access -> SQL server

Здравейте пак. Работата по MS Access Project-a напредна доста. Понаучих се и как се пишат Stored Procedures но се появи едно препъни камъче.
На доста от формите си ползвам Combo boxes, които са свързани - с две думи ако приемем че за Row Source на първото Комбо използвам прост(безусловен) Select, то второто Комбо има за Row Source, Select който е на база стойността в първото комбо.
Примерче:
*******1st combo (Combo17) Row Source:*********
SELECT location FROM Locations;

*******2nd combo Row Source:*********
SELECT client_name FROM clients WHERE location=[Combo17];

Във варианта с обикновения Access файл селекта на второто комбо работи. Т.е. стойността на =[Combo17] успява да се прочете и да се изпълни във втория селект.
Във варианта с MS Project - ядец. Какво ли не пробвах като синтакс. Ако например заместя [Combo17] със текстов стринг - 'Burgas' например - работи. Т.е. проблема е единствено, че не може да се прочете динамично избраната стойност в първия комбо бокс. Стигнах дотам че написах Stored Procedure на сървъра, която приема като параметър текущо селектираната стойност от [Combo17] и връща селекта. И я викам от Row Source на второто комбо. Пак ударих на камък. Пак не иска да чете първото комбо. А иначе пак работи с директна стойност. И май имам проблем с интерфейса на Access-а. Не знам вече какво да пиша.
Ако някой има идеи или се е сблъсквал с подобен проблем, ще съм безкрайно благодарен за съвет.

Отговор
в отговор на Kalistro #5

Re: Access -> SQL server

Zdravei Kalistro,

DTS_Paket:

1. deklarirash "Global_Variable=SELECT location FROM Locations"
2. sledvachtia SELECT "SELECT client_name FROM clients WHERE location=?"(?- oznatchava davam Parametara na Global_Variable)

pogledni:

[линк]

Отговор