powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / msaccess 2.0 -> mssql
19 сообщений из 19, страница 1 из 1
msaccess 2.0 -> mssql
    #39313581
MsDatabaseru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
появилась задачка оживить мамонта,
нужно очень старое приложение на втором аксессе соединить с данными на sql сервере.

есть такая статья
https://support.microsoft.com/en-us/kb/101375

в которой говорится мол
Select *
FROM authors
IN "" "ODBC;dsn=Corp;database=pubs;uid=<login name>;pwd=<password>";

но
Note that it starts with "ODBC," which tells the system that it uses the ODBC driver (as opposed to an installable ISAM driver).

аксеес2 использует 16 битные одбц
https://msdn.microsoft.com/en-us/library/ms712373(v=vs.85).aspx

In addition, the following files along with the 16-bit ODBC 2.10 Driver Manager, which are not part of ODBC 3.51, are required by and should be installed with the 16-bit application.
File name Description
Odbc.dll 16-bit Driver Manager
Odbcinst.dll 16-bit Installer DLL
Odbcadm.exe 16-bit ODBC Administrator program

собственно непонятно где можно в 21 веке найти 16 битные ODBC DRIVERS
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39313614
А sql сервер у вас тоже 16 битный "мамонт"? Если свежий, то ничего не выйдет.
И почему появилась такая задачка, свежего Акса нет?
Если задача только "посмотреть", то можно слить данные из sql в текстовые файлы, а в Аксе прилинковать их или импортировать.
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39313629
MsDatabaseru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сервер достаточно свежий,
тут говорится что старые 16 битные приложения могут работать с новыми серверами

...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39313634
MsDatabaseru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
свежий аксесс есть, более того указанная конструкция работает в нем,
приложение написанное под аксесс 2 не работает под свежими версиями и переписывать его на свежие версии процесс не одного дня,
изза объемов кода
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39357547
MsDatabaseru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оказалось проще и удобнее для всех сделать перенос с аксесса 2.0 в аксесс 2007.
адп делать не стал ибо друзья из микрософт зарубили адп в свежих версиях
потратил месяц на раздумья, пару недель на конвертацию и подготовку скриптов переноса, недельку на тесты
и 5 минут на сам процесс пререхода
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39357634
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MsDatabaseru,

Присоединённые таблицы? Быстро ли работает?
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39357794
MsDatabaseru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да линкованные таблицы, где подтормаживало достороил на mssql покрывающие индексы прямо в ходе работы пользователей.

несколько ништяков
создал служебную табличку в которой имена таблиц к которым линковаться, она была все равно нужна для автоматизации перехода

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub link_sql()
Dim rs
Set rs = New ADODB.Recordset
rs.Open "select * from _linktables", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do Until rs.EOF
        SilentDropTable (rs!tablename)
        DoEvents

  DoCmd.TransferDatabase _
  acLink, _
  "ODBC Database", _
  "ODBC;Driver={SQL Server};Server=dataserver\dataserver2000;Database=Buch2;Trusted_Connection=Yes", _
  acTable, "dbo." & rs!tablename & "", rs!tablename
    
  rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Sub

Public Sub SilentDropTable(tablename)
On Error Resume Next
CurrentDb.Execute "drop table " & tablename 'table
End Sub



собственно ништяков несколько
- работает виндовая аутентификация, не нужно вводить и вбивать логины и параоли
- не нужно сосздавать и указывать дсн
пользователь авторизуется за счет того что у него однажды была прилинкована шара с сервера net use ... /persistent=yes
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39357805
MsDatabaseru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помогал с переходом один творческий товарищ, который перевел тулбары в рибоны..
но оставил в наследство 600 макросов.
очень неудобно сначала искать какой макрос из кнопки вызывается а потом еще и форму искать

поэтому в рибонах убрал макросы заменив их на публичную функцию
Код: xml
1.
2.
3.
4.
5.
<button id="button112"
   label="Приходный кассовый ордер(ПКО)"  
   imageMso="AdpOutputOperationsAddToOutput" 
   enabled="true" 
   onAction="=Reload_form('00_PKO')"  />



сама функция такая
Код: vbnet
1.
2.
3.
4.
5.
6.
Public Function Reload_form(FRM_NAME As String, Optional WM As AcWindowMode = acWindowNormal, Optional openarg As String)
    On Error Resume Next
    SysCmd acSysCmdSetStatus, FRM_NAME
    If CurrentProject.AllForms(FRM_NAME).IsLoaded Then DoCmd.Close acForm, FRM_NAME
    DoCmd.OpenForm FRM_NAME, , , , , WM, openarg
End Function


выводит в статус бар имя объекта (для ориентации), а вообще надобы в меню формы вывести кнопку конструктора
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39357808
MsDatabaseru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
менять значения в 600 кнопках рибонов было очень скучным занятием,
поэтому нарисовал процедурку

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub tstremovemacro()
Dim macrotext, arg
Dim mm
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "select * from USysRibbons", CurrentProject.Connection, adOpenKeyset, adLockOptimistic


For Each mm In CurrentProject.AllMacros
    macrotext = getmacro_text(mm.NAME, "Action =""OpenForm""")
    If macrotext <> "" Then
        arg = Split(Split(macrotext, "Argument =""")(1), Chr(34))(0)
        rs!ribbonxml = Replace(rs!ribbonxml, mm.NAME, "=Reload_form('" & arg & "')")
        'DoCmd.DeleteObject acMacro, mm.NAME
        Debug.Print arg & vbCrLf
    End If
Next mm

rs.Update
rs.Close
End Sub



для нее понадобилась функция добытия текста макроса по условию

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 Function getmacro_text(strMacroName As String, strQueryName As String) As String
    Dim oFSO 'As New FileSystemObject
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Dim oFS
    Dim strFileContents As String

        Application.SaveAsText acMacro, strMacroName, "c:\temp.txt"
        Set oFS = oFSO.OpenTextFile("c:\temp.txt")
        strFileContents = ""
        Do Until oFS.AtEndOfStream
            strFileContents = strFileContents & oFS.ReadLine
        Loop
        Set oFS = Nothing

        Kill "c:\temp.txt"
    
        If InStr(strFileContents, strQueryName) <> 0 Then
          getmacro_text = strFileContents
        End If
    
    Set oFSO = Nothing
 End Function
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39357836
MsDatabaseru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nebo
Присоединённые таблицы? Быстро ли работает?

был в коде шедевральный кусок, который включали только уходя на празники, ибо вживую никто не видел чтобы он выполнился..

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
'todo &#234;&#224;&#234;&#238;&#233;&#242;&#238; &#225;&#224;&#227; &#242;&#243;&#242;, &#225;&#251;&#235; &#237;&#232;&#234;&#238;&#227;&#228;&#224; &#237;&#229; &#226;&#251;&#239;&#238;&#235;&#237;&#255;&#235;&#238;&#241;&#252; &#228;&#238; &#234;&#238;&#237;&#246;&#224;
' &#211;&#247;&#232;&#242;&#251;&#226;&#224;&#254;&#242;&#241;&#255; &#228;&#238;&#227;&#238;&#226;&#238;&#240;&#224;  &#241; 2006 &#227;&#238;&#228;&#224;
'Dim MyDate  As Variant
'Dim MyBD As Database, MyN As Recordset, MyN_2 As Recordset
'Const MB_OK = 0
'Const MB_Q = 16
''************************************************
Beep
If MsgBox("&#206;&#225;&#237;&#238;&#226;&#232;&#242;&#252; &#228;&#224;&#237;&#237;&#251;&#229; &#239;&#238; &#228;&#238;&#227;&#238;&#226;&#238;&#240;&#224;&#236; &#237;&#224; &#239;&#240;&#238;&#228;&#224;&#230;&#243; &#243;&#241;&#235;&#243;&#227;?", 1 + 32 + 0, "&#208;&#229;&#227;&#232;&#241;&#242;&#240;&#224;&#246;&#232;&#255; &#228;&#238;&#227;&#238;&#226;&#238;&#240;&#238;&#226;") = 1 Then
Set MyBD = DBEngine.Workspaces(0).Databases(0)
Set MyN = MyBD.OpenRecordset("SELECT  [98_Dog].MANAGER, [98_Dog].PROD_CODE, [98_Dog].DatePol, [98_Dog].COD  FROM [98_Dog] WHERE (((IsNull([DatePol])) = True)) ", dbOpenDynaset, dbSeeChanges)
Set MyN_2 = MyBD.OpenRecordset("SELECT * FROM PRODCODE WHERE (((Left([code],2))='00') AND (Right(iif(len([DATE_DOG])=10,[DATE_DOG],'20'+Right([DATE_DOG],2)),4)>='2012')) ", dbOpenSnapshot, dbReadOnly)
If MyN_2.RecordCount > 0 Then
''************************************************
    MyN_2.MoveFirst
    Do Until MyN_2.EOF
        MyN.FindFirst ("[PROD_CODE] = '" & Trim(MyN_2![code]) & "'")
        If MyN.NoMatch Then
            On Error GoTo MyError
            If IsDate(CVDate(Mid(Trim(MyN_2![NAME]), InStr(InStr(Trim(MyN_2![NAME]), " ") + 2, Trim(MyN_2![NAME]), " ", 0) + 1, 8))) Then
                MyDate = CVDate(Mid(Trim(MyN_2![NAME]), InStr(InStr(Trim(MyN_2![NAME]), " ") + 2, Trim(MyN_2![NAME]), " ", 0) + 1, 8))
            End If
            MyN.AddNew
            MyN![PROD_CODE] = MyN_2![code]
            MyN![MANAGER] = MyN_2![MANAGER]
            MyN.Update
        Else
            If Trim(MyN![MANAGER]) <> Trim(MyN_2![MANAGER]) Then
                MyN.Edit
                MyN![MANAGER] = MyN_2![MANAGER]
                MyN.Update
            End If
        End If
MyError2:
        MyN_2.MoveNext
    Loop
''************************************************
MyN_2.Close
MyN.Close





был заменен на строку вызова процедуры на строне сервера


Код: vbnet
1.
SQLADOEXECUTE ("exec [98_Dog_autoregistration]")



служебная функция
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Const ADOCONSTRING = "Driver={SQL Server};Server=dataserver\dataserver2000;Database=Buch2;Trusted_Connection=Yes"

Public Function SQLADOEXECUTE(sql) As ADODB.Recordset
    Dim cnn As ADODB.Connection
    Set cnn = New ADODB.Connection
    cnn.Open ADOCONSTRING
    Set SQLADOEXECUTE = cnn.Execute(sql)
    cnn.Close
    Set cnn = Nothing
End Function



сама процедура до безобразия проста
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE procedure [dbo].[98_Dog_autoregistration]
as
insert [dbo].[98_Dog] ( PROD_CODE , MANAGER )
SELECT rtrim(ltrim([code])), manager
 FROM dbo.PRODCODE  
where year(cast ([DATE_DOG] as datetime )) >= 2012 
and Left([code],2)='00'
and rtrim(ltrim([code])) not in ( select [PROD_CODE] FROM [buch2].[dbo].[98_Dog])


update d set manager = prod.manager
--select  d.manager , prod.manager
from [dbo].[98_Dog] d 
inner join dbo.PRODCODE prod on rtrim(ltrim(prod.[code])) = [PROD_CODE]
where d.manager <> prod.manager

return 0


выполняется в доли секунды
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39359696
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MsDatabaseru,
тут писали, что и в 16 аксе есть адр, правда доступ к нему хитрый.
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39361655
MsDatabaseru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за наводку, попробую изучить.
хотя вроде как выходит и мдб линкованый не такуж плох если все по уму делать
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39362122
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MsDatabaseruспасибо за наводку, попробую изучить.
хотя вроде как выходит и мдб линкованый не такуж плох если все по уму делать
если сеть гигабитная, или rdp работать
но адп сама прелесть.....
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39362153
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MsDatabaseruспасибо за наводку, попробую изучить.
хотя вроде как выходит и мдб линкованый не такуж плох если все по уму делать

Вот только как по уму всё сделать) ?

Помню линковал таблицы к серверу.
Запросы к таким таблицам работали медленно.
Читал про запросы к серверу. На этом и остановился.
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39362348
Odess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NeboЧитал про запросы к серверу. На этом и остановился.
С этого нужно начинать, а не останавливаться :)
Например есть таблица на 100 000 записей с выходом сотрудников на работу. Нужно выбрать кто был на смене, к примеру, 01.10.2016. Если делать выборку из связанной таблицы, то акцесс затянет все 100 000 записей себе и потом будет выполнять выборку. Если же написать запрос с параметрами Дата1 и Дата2 (период), то он вернет, к примеру 100-200 записей, что будет в 500 раз быстрее... Это самый простой пример.
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39362427
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Odess,

+ хранимка сюда же
туда команда, от туда результат
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39362848
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Odess,

Спасибо за наглядное объяснение)
я собирался на ютубе посмотреть как результат от запроса к SQL серверу привязать к форме в качестве источника формы.
Если Вас не затруднит, подкиньте информации по этой теме пожалуйста)

Хлопотно ли готовый mdb проект переделать на работу с данными от SQL сервера?
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39362870
Odess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это зависит от самого проекта, сложно на пальцах что-то предполагать.
Нужно учить SQL и понемногу переводить.
...
Рейтинг: 0 / 0
msaccess 2.0 -> mssql
    #39363009
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nebo,
лучше найди как адп создавать..
а запросы к серверу есть пункт в конструкторе запрсов . или хранимки, в mssql возможность их огромна. по поводу того что тянут запросы было тут исследование-спор, довольно хорошо разобрались.
если кто помнит - ссылку для Nebo дайте.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / msaccess 2.0 -> mssql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]