-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4

Invalid link!








Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://www.sql.ru/forum/actualtopics.aspx?bid=4.
Данный дневник сформирован из открытого RSS-источника по адресу http://www.sql.ru/forum/actualrss.aspx?id=4, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

Результат основного запроса (подзапроса) для выполнения выборки

Вторник, 09 Февраля 2016 г. 23:32 + в цитатник
Доброго времени суток,уважаемые

Нужна ваша помощь в вопросе оптимизации выполнения запросов на выборку. Являясь профанами, мы используем Access в основном для работы с внешними источниками информации (базы перевозок), которые, не являясь нормированными, требуют определенной обработки информации, допустим, классификации адресов по областям/федеральным округам в той же базе. Соответственно, на основе получаемой информации у нас ведутся специальные таблицы-классификаторы, с помощью которых базы данных приводятся в нормальный вид Updat-ами и после этого Select-ами с условиями и JOIN-ами выгружается обработанная информация в необходимом формате и разрезе.
Соответственно, необходимо проверять полноту обработки информации, то есть, чтобы все адреса были классифицированы итд, для этого у нас есть специальные запросы на проверку полноты в справочных таблицах-классификаторов с соответствующими JOIN-ами к основной базе.

Вопрос: можно ли сделать так, чтобы при отсутствии части адресов основной БД (по которой делается выборка) в таблице-классификаторе выборка НЕ производилась? Поиски в гугле и курении мануалов результата не дало, но у меня есть предположение, что это можно сделать с помощью подзапроса not exists.
З.Ы Прошу макросы не предлагать, тк знание SQL находиться на уровне конструктора запросов, VBA - отсутствует
Спасибо!

http://www.sql.ru/forum/1199789/rezultat-osnovnogo-zaprosa-podzaprosa-dlya-vypolneniya-vyborki


администратор футольной команды

Вторник, 09 Февраля 2016 г. 23:29 + в цитатник
Спроектировать базу данных администратора футбольной команды. В БД должны храниться сведения о командах, участвующих в первенстве, и об игроках, играющих в данной команде, стадионах, на которых проходят встречи, и цене билета на игры.
Сведения о команде представляют собой название команды, город, где она базируется, ФИО тренера, даты встреч команды, счет встреч, противников команды, стадион, на котором играет команда, место в таблице прошлого сезона. Сведения об игроках включают в себя ФИО игроков, их номера, результативность данного игрока в данной встрече. В один день команда может играть только в одном матче. Сведения о стадионе содержат: название, город, вместимость. Цена билета на матч зависит от вместимости стадиона и положения команды в прошлом году (наибольшая - при игре тройки призеров, наименьшая - при игре тройки аутсайдеров). Игроки могут переходить из одной команды в другую. Некоторые встречи могут быть перенесены.
Администратору могут потребоваться следующие сведения:
- даты встреч команды, ее противники и счет;
- ФИО и номера игроков, участвовавших во встрече ( по названию команды, городу и дате встречи );
- результативность данного игрока в данной встрече ( по названию команды, городу, дате встречи и ФИО игрока );
- цена билета на матч указанных команд.
Необходимо предусмотреть возможность выдачи справки об играх на указанном стадионе и отчета о проведенных играх (количество проведенных встреч, число побед хозяев и гостей, ФИО игроков, забивавших мячи в каждой команде, названия стадионов, где проводились встречи).

http://www.sql.ru/forum/1199787/administrator-futolnoy-komandy


Рекурсивная ф-я Access для вывода полного пути по названию

Вторник, 09 Февраля 2016 г. 10:38 + в цитатник
Коллеги, поиском искал, нужного не заметил, а может пропустил, прошу помочь, есть ф-я для MSSQL, работает на ура, как надо, надо такую же на Access, наверняка есть она в природе, приведите тут её.

И второй вопрос, как её оформить в Access, сохранить как запрос, а как параметры передать?

CREATE function [dbo].[ShowFullPathName](@id int) returns nvarchar(2000)
as
begin
 declare 
  @ret nvarchar(200),
  @rtid int
  select @ret=GoodName, @rtid=IdParentGood from dbo.Good where GoodRowid=@id
  if @rtid <> 0
   SET @ret=dbo.ShowFullPathName(@rtid)+' > '+@ret
 Return @ret
end


Заранее благодарю!

http://www.sql.ru/forum/1199644/rekursivnaya-f-ya-access-dlya-vyvoda-polnogo-puti-po-nazvaniu


Конвертер из Excel в xml в VBA

Понедельник, 08 Февраля 2016 г. 20:50 + в цитатник
Упарился я его переделывать
мож
кому пригодиться

Option Compare Database
Option Explicit

Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long


Private Sub btnProcess_Click()
On Error GoTo Error_
Dim fl1 As Integer, ErrCount As Integer
Me.Dirty = False
    If Nz(Me!path_xml, "") = "" Then
        MsgBox "Сначала надо выбрать путь куда сохранять"
        Exit Sub
    End If
    If Nz(Me!КодСтраховойОрганизации, 0) = 0 Then
        MsgBox "Сначала надо выбрать страховую компанию"
        Exit Sub
    End If
    If Nz(Me!КодВидаСтрахования, 0) = 0 Then
        MsgBox "Сначала надо выбрать вид страхования"
        Exit Sub
    End If
    
    mdTools.SaveBaseXml Me!path_xml
    
'Начинаем
Dim wa As Object 'Object 'Excel.Application
Dim wd As Object 'Object 'Excel.Workbook
Dim ws As Object 'Object 'Excel.Worksheet
Dim c1 As Object 'Object 'Excel.Cell

Dim ts1 As Object
Dim fs As New fso
Dim first_row As Long, last_row As Long, tmp_int As Integer, tmp_dbl As Double, tmp_str As String
Dim ii As Integer, jj As Integer, kk As Integer, curdog As String, cursub As String, curreg As String, prevdog As String, prevsub As String, prevreg As String
Dim curdog8 As String, cursub8 As String, curreg8 As String, prevdog8 As String, prevsub8 As String, prevreg8 As String
Dim payments_all As Double, payments_gov As Double
Dim ListName As String, ListNumber As Integer, tmpCellName As String
    Set wa = CreateObject("Excel.Application")
    Set wd = wa.WorkBooks.Open(Me!path_xls)
'Выбор листа
    If wd.Sheets.Count > 1 Then
        Set wd_ = wd
        DoCmd.OpenForm "frmList1", , , , , acDialog, Me.Name
        If IsLoaded("frmList1") Then
            If Nz(Forms("frmList1")!lst1, 0) = 0 Then
                DoCmd.Close acForm, "frmList1"
                Set wd_ = Nothing
                GoTo Exit_
            Else
                ListName = Forms("frmList1")!lst1.Column(1)
                wd.Sheets(ListName).Select
                DoCmd.Close acForm, "frmList1"
                Set wd_ = Nothing
            End If
        End If
    Else
        ListName = wd.Sheets(1).Name
    End If
    ListNumber = wd.Sheets(ListName).Index
'Определение размеров
    wa.Cells(1, 1).Select
    wa.Range(wa.Selection, wa.ActiveCell.SpecialCells(xlLastCell)).Select
    last_row = wa.ActiveCell.SpecialCells(xlLastCell).row
    
    wa.Columns("A:A").Select
    wa.Selection.Find(What:="1", After:=wa.ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    
    first_row = wa.ActiveCell.row

    wa.Rows(first_row & ":" & first_row).Select
    wa.Selection.Delete Shift:=xlUp

'Go
    DoCmd.SetWarnings False
    DoCmd.RunSQL "delete * from TempДоговорыДтСлучаи"
    DoCmd.RunSQL "alter table TempДоговорыДтСлучаи alter column Код counter(1,1)"
    DoCmd.RunSQL "delete * from TempДоговорыДт"
    DoCmd.RunSQL "alter table TempДоговорыДт alter column Код counter(1,1)"

Dim rst As DAO.Recordset, rst2 As DAO.Recordset, КодДоговора As String, f As Field
Dim rstEv As DAO.Recordset

Dim flEdit As Boolean
DoCmd.OpenForm "frmProcess", acNormal
Forms!frmProcess.Caption = "Запись во временную талицу"
Forms!frmProcess.Repaint
Forms!frmProcess!ProgressBar.Max = last_row - first_row

    Set ts1 = fs.fso.OpenTextFile(Me!path_xml, 8, 0, -2)  '8=ForAppending, -1=Юникод
    
    For ii = first_row To last_row
Forms!frmProcess!ProgressBar.Value = ii - first_row
Forms!frmProcess.Repaint
If Len(wa.Cells(ii, 1)) = 0 Then Exit For
If Asc(Left(wa.Cells(ii, 1), 1)) < 48 Or Asc(Left(wa.Cells(ii, 1), 1)) > 57 Then Exit For
    Set rst = CurrentDb.OpenRecordset("select * from TempДоговорыДт")
    
        КодДоговора = Nz(DLookup("Код", "TempДоговорыДт", "number = """ & wa.Cells(ii, mdTags.GetPos("number")) & _
                                                          """ and region = """ & wa.Cells(ii, mdTags.GetPos("region")) & _
                                                          """ and subject_name = """ & wa.Cells(ii, mdTags.GetPos("subject_name")) & """"), 0)
        If КодДоговора = 0 Then
            flEdit = False
            rst.AddNew
            КодДоговора = rst!Код
        Else
            flEdit = True
            rst.MoveFirst
'            rst.FindFirst
            rst.Filter = "Код = " & КодДоговора
            Set rst2 = rst.OpenRecordset
            
'If rst!number <> wa.Cells(ii, mdTags.GetPos("number")) Then Stop
            rst2.Edit
        End If
        
        If flEdit Then
            For Each f In rst2.Fields
                If f.Name = "insurance_amount" Or f.Name = "insurance_premium" Or f.Name = "payments_all" Or f.Name = "payments_gov" Then
                    f.Value = f.Value + IIf(wa.Cells(ii, mdTags.GetPos(f.Name)) = "", 0, wa.Cells(ii, mdTags.GetPos(f.Name)))
                End If
            Next
            rst2.Update
        Else
            For Each f In rst.Fields
                If f.Name <> "Код" Then
                    tmp_str = Trim(wa.Cells(ii, mdTags.GetPos(f.Name)))
                    If f.Type = 8 And tmp_str <> "" Then
                        f.Value = wa.Cells(ii, mdTags.GetPos(f.Name))
                        GoTo Next1
                    End If
                    f.Value = IIf(tmp_str = "", Null, tmp_str)
Next1:
                End If
            Next
            rst.Update
        End If
        If Len(wa.Cells(ii, mdTags.GetPos("event_description"))) > 0 Then
            Set rstEv = CurrentDb.OpenRecordset("select * from TempДоговорыДтСлучаи where " & _
                "КодДоговора = " & КодДоговора & _
                " and event_description = """ & wa.Cells(ii, mdTags.GetPos("event_description")) & """")
            If rstEv.RecordCount > 0 Then
                rstEv.MoveFirst
                rstEv.Edit
                Set f = rstEv.Fields("estimation_value")
                f.Value = f.Value + IIf(wa.Cells(ii, mdTags.GetPos(f.Name)) = "", 0, wa.Cells(ii, mdTags.GetPos(f.Name)))
                Set f = rstEv.Fields("payment_val")
                f.Value = f.Value + IIf(wa.Cells(ii, mdTags.GetPos(f.Name)) = "", 0, wa.Cells(ii, mdTags.GetPos(f.Name)))
            Else
                rstEv.AddNew
                rstEv!КодДоговора = КодДоговора
                For jj = 2 To rstEv.Fields.Count - 1
                    tmp_str = Trim(wa.Cells(ii, mdTags.GetPos(rstEv.Fields(jj).Name)))
                    If rstEv.Fields(jj).Type = 8 And tmp_str <> "" Then
                        rstEv.Fields(jj).Value = wa.Cells(ii, mdTags.GetPos(rstEv.Fields(jj).Name))
                        GoTo Next2
                    End If
                    rstEv.Fields(jj).Value = IIf(tmp_str = "", Null, tmp_str)
Next2:
                Next
            End If
            rstEv.Update
        End If
    Next ii
    
    wd.Close False
    Set wd = Nothing
    Set wa = Nothing
    
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM TempДоговорыДтДляXML ORDER BY number, region, subject_name")
    If rst.RecordCount > 0 Then
        rst.MoveLast
        rst.MoveFirst
    End If
    
Forms!frmProcess.Caption = "Запись в файл"
Forms!frmProcess.Repaint
Forms!frmProcess!ProgressBar.Max = rst.RecordCount
    ii = 0
    While Not rst.EOF
        ii = ii + 1
Forms!frmProcess!ProgressBar.Value = ii
Forms!frmProcess.Repaint
        
        curdog = rst!number
        cursub = rst!subject_name
        curreg = rst!region
        
        If prevdog <> rst!number Then
            ts1.WriteLine Space(4 * 1) & ""
            ts1.WriteLine Space(4 * 2) & "" & Me![КодСтраховойОрганизации].Column(2) & ""
            ts1.WriteLine Space(4 * 2) & "" & rst!КодВидаСтрахования & ""
            ts1.WriteLine Space(4 * 2) & "" & ToUTF8(rst!region) & ""
            ts1.WriteLine Space(4 * 2) & "" & ToUTF8(rst!number) & ""
            ts1.WriteLine Space(4 * 2) & "" & Format(rst!date_contract, "yyyy-mm-dd") & ""
            ts1.WriteLine Space(4 * 2) & "" & Format(rst!date_contract, "yyyy-mm-dd") & ""
            ts1.WriteLine Space(4 * 2) & "" & Format(rst!end_date, "yyyy-mm-dd") & ""
            'Получаем суммарные данные
tmp_str = Round(DSum("payments_all", "TempДоговорыДт", "number = """ & rst!number & """"), 2)
            ts1.WriteLine Space(4 * 2) & "" & Replace(IIf(tmp_str = "", "0", tmp_str), ",", ".") & ""
tmp_str = Round(DSum("payments_gov", "TempДоговорыДт", "number = """ & rst!number & """"), 2)
            ts1.WriteLine Space(4 * 2) & "" & Replace(IIf(tmp_str = "", "0", tmp_str), ",", ".") & ""
        End If

        If Not (prevdog = rst!number And prevsub = rst!subject_name And prevreg = rst!region) Then
            kk = 1
            ts1.WriteLine Space(4 * 2) & ""
            ts1.WriteLine Space(4 * 3) & "" & ToUTF8(rst!subject_name) & ""
            ts1.WriteLine Space(4 * 3) & "0"
tmp_str = Round(DSum("insurance_amount", "TempДоговорыДт", "number = """ & rst!number & """" & _
                                                           " and region = """ & rst!region & """" & _
                                                           " and subject_name = """ & rst!subject_name & """" _
                                                            ), 2) 'rst!insurance_amount
            ts1.WriteLine Space(4 * 3) & "" & Replace(IIf(tmp_str = "", "0", tmp_str), ",", ".") & ""
tmp_str = Round(DSum("insurance_premium", "TempДоговорыДт", "number = """ & rst!number & """" & _
                                                           " and region = """ & rst!region & """" & _
                                                           " and subject_name = """ & rst!subject_name & """" _
                                                            ), 2) 'rst!insurance_premium, 2)
            ts1.WriteLine Space(4 * 3) & "" & Replace(IIf(tmp_str = "", "0", tmp_str), ",", ".") & ""
tmp_dbl = rst!franshiza
'If tmp_dbl > 30 Then tmp_dbl = 30
            ts1.WriteLine Space(4 * 3) & "" & Replace(tmp_dbl, ",", ".") & ""
            ts1.WriteLine Space(4 * 3) & "" & ToUTF8("Нет") & ""
        Else
            kk = kk + 1
        End If
        If kk = 1 Then ts1.WriteLine Space(4 * 3) & ""

        Set rstEv = CurrentDb.OpenRecordset("select * from TempДоговорыДтСлучаи where " & _
            "КодДоговора = " & rst!Код)
        If rstEv.RecordCount > 0 Then 'Дата страхового случая не пустая
            ts1.WriteLine Space(4 * 4) & "" & ToUTF8(rstEv!event_description) & ""
            ts1.WriteLine Space(4 * 4) & "" & Format(rstEv!event_date, "yyyy-mm-dd") & ""
            ts1.WriteLine Space(4 * 4) & "0"
            ts1.WriteLine Space(4 * 4) & ""
tmp_str = Round(Nz(rstEv!estimation_value, 0), 2)
            ts1.WriteLine Space(4 * 5) & "" & Replace(IIf(tmp_str = "", "0", tmp_str), ",", ".") & ""
            ts1.WriteLine Space(4 * 5) & "" & Format(rstEv!payment_date, "yyyy-mm-dd") & ""
tmp_str = Round(Nz(rstEv!payment_val, 0), 2)
            ts1.WriteLine Space(4 * 5) & "" & Replace(IIf(tmp_str = "", "0", tmp_str), ",", ".") & ""
            ts1.WriteLine Space(4 * 4) & ""
            ts1.WriteLine Space(4 * 4) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 4) & ""
        Else
            If kk = 1 Then
                ts1.WriteLine Space(4 * 4) & ""
                ts1.WriteLine Space(4 * 4) & ""
                ts1.WriteLine Space(4 * 4) & ""
                ts1.WriteLine Space(4 * 4) & ""
                ts1.WriteLine Space(4 * 5) & ""
                ts1.WriteLine Space(4 * 5) & ""
                ts1.WriteLine Space(4 * 5) & ""
                ts1.WriteLine Space(4 * 4) & ""
                ts1.WriteLine Space(4 * 4) & ""
                ts1.WriteLine Space(4 * 5) & ""
                ts1.WriteLine Space(4 * 5) & ""
                ts1.WriteLine Space(4 * 5) & ""
                ts1.WriteLine Space(4 * 4) & ""
            End If
        End If
        If kk = 1 Then ts1.WriteLine Space(4 * 3) & ""
        
        prevdog = curdog
        prevreg = curreg
        prevsub = cursub
        
        rst.MoveNext
        
        If rst.EOF Then
            ts1.WriteLine Space(4 * 2) & ""
            ts1.WriteLine Space(4 * 1) & ""
            GoTo Wend_
        End If
        If Not (curdog = rst!number And cursub = rst!subject_name And curreg = rst!region) Then
            ts1.WriteLine Space(4 * 2) & ""
        End If
        If curdog <> rst!number Then
            ts1.WriteLine Space(4 * 1) & ""
        End If
        
Wend_:
    Wend
    
    ts1.WriteLine ""
DoCmd.SetWarnings True
    MsgBox "Готово"
Exit_:

DoCmd.Close acForm, "frmProcess"
    If Not wd Is Nothing Then wd.Close False
    Set wd = Nothing
    Set wa = Nothing
    
Exit2_:
DoCmd.Hourglass False
    Exit Sub
Error_:
    ErrCount = ErrCount + 1
    Select Case fl1
    Case 1
        MsgBox "Ошибка в строке " & ii + 1 & " и в колонке " & tmpCellName
    Case 2
        MsgBox "Ошибка в строке " & wa.ActiveCell.row & ". Выполнение прервано."
    Case 3
        MsgBox "Ошибка в строке " & wa.ActiveCell.row & ". Выполнение прервано."
    Case 4
        MsgBox "Ошибка в строке " & wa.ActiveCell.row & ". Выполнение прервано."
    End Select
    'Debug.Print Err.Source, Err.HelpContext
    Call GetError(Err.number, Err.Description, Me.Name, "btnProcess_Click")
    If ErrCount = 1 Then
        Resume Exit_
    Else
        Resume Exit2_
    End If

End Sub

Private Sub btnProcess_Click_Old()
On Error GoTo Error_
Dim fl1 As Integer, ErrCount As Integer
Me.Dirty = False
    If Nz(Me!path_xml, "") = "" Then
        MsgBox "Сначала надо выбрать путь куда сохранять"
        Exit Sub
    End If
    If Nz(Me!КодСтраховойОрганизации, 0) = 0 Then
        MsgBox "Сначала надо выбрать страховую компанию"
        Exit Sub
    End If
    If Nz(Me!КодВидаСтрахования, 0) = 0 Then
        MsgBox "Сначала надо выбрать вид страхования"
        Exit Sub
    End If
    
    mdTools.SaveBaseXml Me!path_xml
    
'Начинаем
Dim wa As Object 'Object 'Excel.Application
Dim wd As Object 'Object 'Excel.Workbook
Dim ws As Object 'Object 'Excel.Worksheet
Dim c1 As Object 'Object 'Excel.Cell

Dim ts1 As Object
Dim fs As New fso
Dim first_row As Long, last_row As Long, tmp_int As Integer, tmp_dbl As Double, tmp_str As String
Dim ii As Integer, jj As Integer, curdog As String, cursub As String, curreg As String, prevdog As String, prevsub As String, prevreg As String
Dim curdog8 As String, cursub8 As String, curreg8 As String, prevdog8 As String, prevsub8 As String, prevreg8 As String
Dim payments_all As Double, payments_gov As Double
Dim ListName As String, ListNumber As Integer, tmpCellName As String
    Set ts1 = fs.fso.OpenTextFile(Me!path_xml, 8, 0, -2)  '8=ForAppending, -1=Юникод
    Set wa = CreateObject("Excel.Application")
    Set wd = wa.WorkBooks.Open(Me!path_xls)
'Выбор листа
    If wd.Sheets.Count > 1 Then
        Set wd_ = wd
        DoCmd.OpenForm "frmList1", , , , , acDialog, Me.Name
        If IsLoaded("frmList1") Then
            If Nz(Forms("frmList1")!lst1, 0) = 0 Then
                DoCmd.Close acForm, "frmList1"
                Set wd_ = Nothing
                GoTo Exit_
            Else
                ListName = Forms("frmList1")!lst1.Column(1)
                wd.Sheets(ListName).Select
                DoCmd.Close acForm, "frmList1"
                Set wd_ = Nothing
            End If
        End If
    Else
        ListName = wd.Sheets(1).Name
    End If
    ListNumber = wd.Sheets(ListName).Index
'Определение размеров
    wa.Cells(1, 1).Select
    wa.Range(wa.Selection, wa.ActiveCell.SpecialCells(xlLastCell)).Select
    last_row = wa.ActiveCell.SpecialCells(xlLastCell).row
    
    wa.Columns("A:A").Select
    wa.Selection.Find(What:="1", After:=wa.ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    
    first_row = wa.ActiveCell.row

    wa.Rows(first_row & ":" & first_row).Select
    wa.Selection.Delete Shift:=xlUp
    
'Создание сводных таблиц
    wd.Sheets.Add After:=wd.Sheets(wd.Sheets.Count)
    wd.Sheets(wd.Sheets.Count).Name = "Summary1"
    wd.Sheets.Add After:=wd.Sheets(wd.Sheets.Count)
    wd.Sheets(wd.Sheets.Count).Name = "Summary2"
    wd.Sheets(ListNumber).Select
    Set ws = wd.Sheets(ListNumber)
    Set c1 = wa.ActiveCell

'1
    wa.Sheets("Summary1").Select
    wa.ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        ListName & "!R" & first_row - 1 & "C1:R" & last_row & "C16", Version:=xlPivotTableVersion12).CreatePivotTable _
        TableDestination:="Summary1!R2C2", TableName:="pvt1", _
        DefaultVersion:=xlPivotTableVersion12

    tmpCellName = c1.Offset(-1, 1)
    mdTags.Update_tmpCellName "number", tmpCellName
    With wa.ActiveSheet.PivotTables("pvt1").PivotFields( _
        tmpCellName)
        .Orientation = xlRowField
        .Position = 1
    End With
    tmpCellName = c1.Offset(-1, mdTags.GetPos("payments_all") - 1)
    mdTags.Update_tmpCellName "payments_all", tmpCellName
    wa.ActiveSheet.PivotTables("pvt1").AddDataField wa.ActiveSheet.PivotTables _
        ("pvt1").PivotFields(tmpCellName), _
        "Сумма по полю " & tmpCellName, xlSum
    tmpCellName = c1.Offset(-1, GetPos("payments_gov") - 1)
    mdTags.Update_tmpCellName "payments_gov", tmpCellName
    wa.ActiveSheet.PivotTables("pvt1").AddDataField wa.ActiveSheet.PivotTables _
        ("pvt1").PivotFields(tmpCellName), _
        "Сумма по полю " & tmpCellName, xlSum
    wa.ActiveWorkbook.ShowPivotTableFieldList = False
    wa.ActiveSheet.PivotTables("pvt1").RowAxisLayout xlTabularRow
'2
    wa.Sheets("Summary2").Select
    wa.ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        ListName & "!R" & first_row - 1 & "C1:R" & last_row & "C16", Version:=xlPivotTableVersion12).CreatePivotTable _
        TableDestination:="Summary2!R2C2", TableName:="pvt2", _
        DefaultVersion:=xlPivotTableVersion12

    tmpCellName = c1.Offset(-1, 1)
'    mdTags.Update_tmpCellName "number", tmpCellName
    With wa.ActiveSheet.PivotTables("pvt2").PivotFields( _
        tmpCellName)
        .Orientation = xlRowField
        .Position = 1
    End With
    tmpCellName = c1.Offset(-1, mdTags.GetPos("region") - 1)
    mdTags.Update_tmpCellName "region", tmpCellName
    With wa.ActiveSheet.PivotTables("pvt2").PivotFields( _
        tmpCellName)
        .Orientation = xlRowField
        .Position = 2
    End With
    tmpCellName = c1.Offset(-1, mdTags.GetPos("subject_name") - 1)
    mdTags.Update_tmpCellName "subject_name", tmpCellName
    With wa.ActiveSheet.PivotTables("pvt2").PivotFields( _
        tmpCellName)
        .Orientation = xlRowField
        .Position = 3
    End With
    tmpCellName = c1.Offset(-1, mdTags.GetPos("insurance_amount") - 1)
    mdTags.Update_tmpCellName "insurance_amount", tmpCellName
    wa.ActiveSheet.PivotTables("pvt2").AddDataField wa.ActiveSheet.PivotTables _
        ("pvt2").PivotFields(tmpCellName), _
        "Сумма по полю " & tmpCellName, xlSum
    tmpCellName = c1.Offset(-1, GetPos("insurance_premium") - 1)
    mdTags.Update_tmpCellName "insurance_premium", tmpCellName
    wa.ActiveSheet.PivotTables("pvt2").AddDataField wa.ActiveSheet.PivotTables _
        ("pvt2").PivotFields(tmpCellName), _
        "Сумма по полю " & tmpCellName, xlSum
    wa.ActiveWorkbook.ShowPivotTableFieldList = False
    wa.ActiveSheet.PivotTables("pvt2").RowAxisLayout xlTabularRow

    wa.ActiveSheet.PivotTables("pvt2").PivotFields(Get_tmpCellName("number")). _
        Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)
    wa.ActiveSheet.PivotTables("pvt2").PivotFields(Get_tmpCellName("region")). _
        Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)
    wa.ActiveSheet.PivotTables("pvt2").PivotFields(Get_tmpCellName("subject_name")). _
        Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)

    wd.Sheets(ListNumber).Select

DoCmd.OpenForm "frmProcess", acNormal
Forms!frmProcess.Repaint
Forms!frmProcess!ProgressBar.Max = last_row - first_row

    For ii = first_row To last_row
Forms!frmProcess!ProgressBar.Value = ii - first_row
Forms!frmProcess.Repaint
If Len(wa.Cells(ii, 1)) = 0 Then Exit For
If Asc(Left(wa.Cells(ii, 1), 1)) < 48 Or Asc(Left(wa.Cells(ii, 1), 1)) > 57 Then Exit For
        curdog = wa.Cells(ii, mdTags.GetPos("number"))
        cursub = wa.Cells(ii, mdTags.GetPos("subject_name"))
        curreg = wa.Cells(ii, mdTags.GetPos("region"))
        curdog8 = ToUTF8(curdog)
        cursub8 = ToUTF8(cursub)
        curreg8 = ToUTF8(curreg)
        If prevdog <> curdog Then
            ts1.WriteLine Space(4 * 1) & ""
            ts1.WriteLine Space(4 * 2) & "" & Me![КодСтраховойОрганизации].Column(2) & ""
            ts1.WriteLine Space(4 * 2) & "" & Me!КодВидаСтрахования & ""
            ts1.WriteLine Space(4 * 2) & "" & curreg8 & ""
            ts1.WriteLine Space(4 * 2) & "" & curdog8 & ""
            ts1.WriteLine Space(4 * 2) & "" & Format(wa.Cells(ii, mdTags.GetPos("date_contract")), "yyyy-mm-dd") & ""
            ts1.WriteLine Space(4 * 2) & "" & Format(wa.Cells(ii, mdTags.GetPos("begin_date")), "yyyy-mm-dd") & ""
            ts1.WriteLine Space(4 * 2) & "" & Format(wa.Cells(ii, mdTags.GetPos("end_date")), "yyyy-mm-dd") & ""
            'Получаем суммарные данные
            wa.Worksheets("Summary1").Activate
            wa.Columns("B:B").Select
            wa.Selection.Find(What:=curdog, After:=wa.ActiveCell, LookIn _
                :=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
                xlNext, MatchCase:=False, SearchFormat:=False).Activate
tmp_str = wa.Cells(wa.ActiveCell.row, 3)
            ts1.WriteLine Space(4 * 2) & "" & Replace(IIf(tmp_str = "", "0", tmp_str), ",", ".") & ""
tmp_str = wa.Cells(wa.ActiveCell.row, 4)
            ts1.WriteLine Space(4 * 2) & "" & Replace(IIf(tmp_str = "", "0", tmp_str), ",", ".") & ""
            wd.Sheets(1).Select
        End If

        If Not (prevdog = curdog And prevsub = cursub And prevreg = curreg) Then
            ts1.WriteLine Space(4 * 2) & ""
            ts1.WriteLine Space(4 * 3) & "" & cursub8 & ""
            ts1.WriteLine Space(4 * 3) & "0"
            'Получаем суммарные данные
            wa.Worksheets("Summary2").Activate
            wa.Columns("B:B").Select
            wa.Selection.Find(What:=curdog, After:=wa.ActiveCell, LookIn _
                :=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
                xlNext, MatchCase:=False, SearchFormat:=False).Activate
            wa.ActiveCell.Offset(0, 1).Select
            While wa.ActiveCell <> curreg
                wa.ActiveCell.Offset(1, 0).Select
            Wend
            wa.ActiveCell.Offset(0, 1).Select
            While wa.ActiveCell <> cursub
                wa.ActiveCell.Offset(1, 0).Select
            Wend

            ts1.WriteLine Space(4 * 3) & "" & Replace(wa.Cells(wa.ActiveCell.row, 5), ",", ".") & ""
            ts1.WriteLine Space(4 * 3) & "" & Replace(wa.Cells(wa.ActiveCell.row, 6), ",", ".") & ""
            wa.Worksheets(ListNumber).Activate
fl1 = 1
tmpCellName = "Франшиза"
tmp_str = Replace(wa.Cells(ii, mdTags.GetPos("franshiza")), ",", ".")
tmp_dbl = IIf(tmp_str = "", 0, Val(tmp_str))
fl1 = 0
If tmp_dbl > 30 Then tmp_dbl = 30
            ts1.WriteLine Space(4 * 3) & "" & Replace(tmp_dbl, ",", ".") & ""
            ts1.WriteLine Space(4 * 3) & "" & ToUTF8("Нет") & ""
        End If
        ts1.WriteLine Space(4 * 2) & ""
        If wa.Cells(ii, 13) <> "" Then 'Дата страхового случая не пустая
            ts1.WriteLine Space(4 * 4) & "" & ToUTF8(wa.Cells(ii, mdTags.GetPos("event_description"))) & ""
            ts1.WriteLine Space(4 * 4) & "" & Format(wa.Cells(ii, mdTags.GetPos("event_date")), "yyyy-mm-dd") & ""
            ts1.WriteLine Space(4 * 4) & "0"
            ts1.WriteLine Space(4 * 4) & ""
            ts1.WriteLine Space(4 * 5) & "" & Replace(wa.Cells(ii, mdTags.GetPos("estimation_value")), ",", ".") & ""
            ts1.WriteLine Space(4 * 5) & "" & Format(wa.Cells(ii, mdTags.GetPos("payment_date")), "yyyy-mm-dd") & ""
            ts1.WriteLine Space(4 * 5) & "" & Replace(wa.Cells(ii, mdTags.GetPos("payment_val")), ",", ".") & ""
            ts1.WriteLine Space(4 * 4) & ""
            ts1.WriteLine Space(4 * 4) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 4) & ""
        Else
            ts1.WriteLine Space(4 * 4) & ""
            ts1.WriteLine Space(4 * 4) & ""
            ts1.WriteLine Space(4 * 4) & ""
            ts1.WriteLine Space(4 * 4) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 4) & ""
            ts1.WriteLine Space(4 * 4) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 5) & ""
            ts1.WriteLine Space(4 * 4) & ""
        End If
        ts1.WriteLine Space(4 * 3) & ""
        If Not (curdog = wa.Cells(ii + 1, mdTags.GetPos("number")) And cursub = wa.Cells(ii + 1, mdTags.GetPos("subject_name")) And curreg = wa.Cells(ii + 1, mdTags.GetPos("region"))) Then
            ts1.WriteLine Space(4 * 2) & ""
        End If
        If curdog <> wa.Cells(ii + 1, mdTags.GetPos(

удаление повторяющихся строки

Понедельник, 08 Февраля 2016 г. 17:30 + в цитатник
Доброе время суток.
есть таблица в не данные:

col1-col2-col3---col4
42--- S--- 57--- 30.01.2016 10:54:41
43--- S--- 60--- 30.01.2016 10:51:51
44--- S--- 65--- 30.01.2016 10:47:11
45--- S--- 68--- 30.01.2016 10:48:21
46--- S--- 72--- 30.01.2016 10:48:45
47--- S--- 75--- 30.01.2016 10:50:27
48--- S--- 78--- 30.01.2016 10:51:19
49--- S--- 83--- 30.01.2016 10:53:04
... ... ... .....
66--- S--- 72--- 30.01.2016 11:08:45
67--- S--- 65--- 30.01.2016 11:47:11
68--- S--- 68--- 30.01.2016 11:48:21
... ... ... .....
77--- S--- 91--- 31.01.2016 11:50:27
78--- S--- 92--- 31.01.2016 11:51:19
79--- S--- 93--- 31.01.2016 11:53:04
... ... ... .....

вот нужен sql запрос который позволит удалить 66,67,68 строчку, т.е. дублирующиеся, оставить только уникальные? В итоге должно быть:
col1-col2-col3---col4
42--- S--- 57--- 30.01.2016 10:54:41
43--- S--- 60--- 30.01.2016 10:51:51
44--- S--- 65--- 30.01.2016 10:47:11
45--- S--- 68--- 30.01.2016 10:48:21
46--- S--- 72--- 30.01.2016 10:48:45
47--- S--- 75--- 30.01.2016 10:50:27
48--- S--- 78--- 30.01.2016 10:51:19
49--- S--- 83--- 30.01.2016 10:53:04
Помогите реализовать такой Sql запрос.
Делаю такой запрос
DELETE a.* FROM tab1 a, (SELECT b.namess, b.dat, MIN(b.id) mid FROM tab1 b GROUP BY  b.namess, b.dat) c WHERE a.namess = c.namess AND a.dat=c.dat AND a.id>c.mid 

Выдает ошибку
Дополнительные сведения: Syntax error (missing operator) in query expression 'MIN(b.id) mid'.

Помогите разобраться Плиз!

http://www.sql.ru/forum/1199566/udalenie-povtoryaushhihsya-stroki


Выбор таблицы источника для запроса

Понедельник, 08 Февраля 2016 г. 14:19 + в цитатник
Приветствую
Подскажите пожалуйста решение такой задачи
Имеется несколько таблиц с одинаковыми полями
На их основании нужно создать запрос, который будет подготавливать эти данные для отчета
Так же имеется возможность фильтровать результат по значению первого поля

Как используя один запрос менять в нем источник данных (таблицу) по выпадающему списку в форме?

Пример: http://my-files.ru/s85nsd

http://www.sql.ru/forum/1199511/vybor-tablicy-istochnika-dlya-zaprosa


Поле со списком!

Понедельник, 08 Февраля 2016 г. 13:42 + в цитатник
Подскажите, пожалуйста, как развернуть поле со списком при получении фокуса?

http://www.sql.ru/forum/1199493/pole-so-spiskom


Закладка в таблице, в документе Word

Понедельник, 08 Февраля 2016 г. 12:10 + в цитатник
Добрый день.
Подскажите, пожалуйста, возможно ли в документ Word вставить закладку так чтобы слово печаталось с разбивкой по полям таблицы? Т.е. каждая отдельная буква в отдельном поле.

http://www.sql.ru/forum/1199476/zakladka-v-tablice-v-dokumente-word


импорт с Excel в Access

Понедельник, 08 Февраля 2016 г. 10:11 + в цитатник
Доброго времени суток!
Прошу помочь с макросом. Задача следующая.
Необходимо загружать данные с Excel в Access с помощью VBA.
В документе Excel - продажи с начала месяца по вчера. Каждый день файл с данными обновляется, но изменения могут быть не только в том, что добавились продажи по следующему дню. Возможен вариант изменения даты или кол-ва продажи за предыдущий день.

В таблице Access данные сохраняются накопительно (декабрь+январь+несколько дней февраля). Необходимо прописать код на загрузку данных с условием обновления всех записей за период - этот и прошлый месяц.

Дальше файл должен быть перемещен и заархивирован.

То, что есть на сейчас:

Function DoImportFirstSales()

Dim strPathFile As String, strFile As String, strPath As String, sFileName As String, sNewFileName As String
 Dim strTable As String
 Dim blnHasFieldNames As Boolean

 blnHasFieldNames = True

 strPath = "\\WF-01\WorkFolders$\e.zelenyj@NSUA\Report\MyReport\Fact\First\"


 strTable = "ФактПервичка"

 strFile = Dir(strPath & "*.xlsx")
 
 Do While Len(strFile) > 0
       strPathFile = strPath & strFile
       DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
             strTable, strPathFile, blnHasFieldNames
             
    strFile = Dir()

 Loop
 
End Function



Буду очень благодарен за помощь.

P.S. Код взят с форума.

http://www.sql.ru/forum/1199440/import-s-excel-v-access


Рисование в Word

Понедельник, 08 Февраля 2016 г. 00:21 + в цитатник
Здравствуйте,
Помогите решить проблему
Есть каталог координат X и Y Нужно нарисовать по координатам фигуру в Word - e
Чтобы получилось что-то наподобие кадастрового плана
Номер т X Y
1 4261529.30211 3151440.04995
2 4261467.36651 3151408.51321
3 4261354.35135 3151350.96091
4 4261355.84447 3151335.15754
5 4261359.0122 3151323.99515
6 4261452.5013 3151185.39553
7 4261541.46156 3151192.21699
8 4261550.27179 3151185.61558
9 4261576.18278 3151145.12693
10 4261581.37158 3151113.53017
11 4261574.01322 3151076.31222
12 4261570.45778 3151051.897
13 4261570.73001 3151035.11342
14 4261564.84827 3151023.60095
15 4261514.76688 3151001.54624
1 4261529.30211 3151440.04995

http://www.sql.ru/forum/1199409/risovanie-v-word


Bad DLL calling convention?

Суббота, 06 Февраля 2016 г. 15:32 + в цитатник
Что означает ошибка "Bad DLL calling convention", вылезающая при ВЫХОДЕ из процедуры?

http://www.sql.ru/forum/1199235/bad-dll-calling-convention


Форма не может найти поле при фильтрации

Суббота, 06 Февраля 2016 г. 13:43 + в цитатник
Чудеса, да и только. Бьюсь полдня, не могу понять в чем дело.
Имеется три таблички, в форме связаны две из них, третья используется в комбобоксе. Если открыть форму, наложить любой фильтр на TransactionTypeID через заголовок (например, исключить пустые строки), а затем попытаться открыть фильтр по другому полю, то выдается ошибка, что не может найти поле TransactionTypeID. Ошибка пропадает, если убираем либо комбобокс (превращаем в текст), либо из запроса удаляем таблицу Tenants1. Ни одно поле из этой таблицы не используется.
Убрал все лишнее, базу создал заново, данные импортировал. 2010 32 бита.
Есть идеи куда копать?

http://www.sql.ru/forum/1199223/forma-ne-mozhet-nayti-pole-pri-filtracii


Форма

Пятница, 05 Февраля 2016 г. 18:51 + в цитатник
Всем привет, никак не могу найти решение следующих проблем. На форме есть поля из таблицы №1 которая содержит следующие столбцы: Город, улица, дом. На форме все поля добавлены, поле город-поле со списком, как сделать так чтобы при выборе в том списке, поля улица и дом заполнялись автоматически из таблицы? И еще как сделать, так чтобы вносимые в форму данные сегодня попадали сначала во временную таблицу из которой будет формироваться отчет по введенным данным, а лишь затем попадали в общую накопительную таблицу?

http://www.sql.ru/forum/1199144/forma


Сохранение выбранных данных из ворда

Пятница, 05 Февраля 2016 г. 17:37 + в цитатник
Здравствуйте.
Есть документ ворд (договор), из которого нужно выбрать дату заключения договора, номер и прочие реквизиты и сохранить в отдельные поля таблицы. Есть ли у кого такой опыт, возможно ли это сделать в аксесс?

http://www.sql.ru/forum/1199122/sohranenie-vybrannyh-dannyh-iz-vorda


Невозможно добавить новую запись (MS Access+MS SQL Server)

Пятница, 05 Февраля 2016 г. 17:36 + в цитатник
На сервере MS SQL Server есть две таблицы, связанные между собой отношением "один-ко-многим". В обеих таблицах существуют поля типа "счётчик". Записи на табличной форме в mdb-файле выводятся посредством ADODB.RecordSet:

Dim rst As New ADODB.Recordset
rst.CursorLocation = adUseClient
rst.Open "SELECT Таблица1.*, Таблица2.* FROM Таблица INNER JOIN Таблица2 ON Таблица1.Счётчик=Таблица2.Поле;", "Provider=sqloledb;Server=...;Database=...;User ID=...;Password=...", adOpenKeyset, adLockOptimistic
Set Recordset = rst

Проблема: на форме невозможно добавление новых записей: пустая запись в конце - отсутствует, хотя кнопка "Перейти к новой записи" - активна. Заполнение свойства формы UniqueTable именем первой или второй таблиц не помогает.

http://www.sql.ru/forum/1199121/nevozmozhno-dobavit-novuu-zapis-ms-access-ms-sql-server


Сбои в работе многопользовательской БД Access!!!

Пятница, 05 Февраля 2016 г. 17:15 + в цитатник
Добрый день!
Прошу Вас помочь мне разобраться в причинах сбоя работы БД.
И так, есть уже сделанная, разделенная, рабочая БД. Есть главные таблицы "ЛОТ", "Клиенты", "Обьекты", куда сотрудники вносят новые записи через формы. Работает одновременно порядка 20 человек. Стабильно 1 раз в день, в разное время происходит сбой записей в главной таблице "ЛОТ" (самопроизвольно исчезает одна или несколько записей, ключевое поле счётчик сбивается и могут там появиться задвоения, вместо записи может появиться "#Удалено" или "#Ошибка").
И потом при открытии базы с таблицами сообщение "База находится в поврежденном состоянии......", а сотрудникам
выдает сообщение "Нераспознаваемый формат базы данных".
Система сетки между сотрудниками построена таким образом:
Есть одна общая папка, например "БАЗА", в ней папка "Таблица", там находится база с главными таблицами и папки с именами сотрудников, которые работают с базой, в них лежат копии базы с запросами и формами (клиентская часть). Сотрудники из главного офиса заходят напрямую в свои базы, а сотрудники с регионов заходят через TSFARM.
База была сделана в 2010 офисе. У сотрудников главного офиса у всех офис 2010, а на TSFARM офис 2013.
Я узнал у наших сотрудников IT, что TSFARM имеет 3 сервера, которые меняются между собой один или несколько раз в день. То есть если сотрудник заходит на TSFARM под своим логином и паролем, в 9:00 то например там стоит сервер SRV-CO-RDS05, а в 13:00 там может быть уже SRV-CO-RDS21. А сама папка "БАЗА" находится на каком-то еще сервере, который не относится к TSFARM.
Могут ли быть сбои в базе из-за TSFARM? Могут ли быть сбои в базе из-за открытия базы разным офисом?
Как мне настроить базу чтоб работала без сбоев? Помогите!!!

http://www.sql.ru/forum/1199115/sboi-v-rabote-mnogopolzovatelskoy-bd-access


Использование рекордсета для обновления (поиск и вставка) данных

Пятница, 05 Февраля 2016 г. 16:27 + в цитатник
Начало здесь:
Оптимизация

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

Для примера использовал базу norhwind.mdf (MS SQL), таблицу [Order Details] и ее локальную копию OrderDetails как внешние данные.
Внимание!
1. Сначала надо прилинковать табл [Order Details] из NorthWind под именем [dbo_Order Details]
2. Выполнение DoIt или data_prepare из кода примера удалит 1/2 данных из табл. [Order Details]

Пример:
+
Option Compare Database
Option Explicit

Sub doit()
    data_prepare
    noobs
    Debug.Print "*******************"
    data_prepare
    var_1
    Debug.Print "*******************"
    data_prepare
    var_2
End Sub

Sub noobs()
    Dim rs As Object
    Dim rs2 As Object
    Dim sqlDel As String
    Dim objConnectionEx, objConnectionSer
    Dim t#, strsql$, i&
    t = Timer
    Set objConnectionEx = CreateObject("ADODB.Connection")
    Set objConnectionSer = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    Set rs2 = CreateObject("ADODB.Recordset")
    Set objConnectionEx = CurrentProject.AccessConnection
    strsql = "select * from orderdetails"
    rs.Open strsql, objConnectionEx, 3, 3 ' открываем рекордсет excel
    If rs.BOF And rs.EOF Then
    MsgBox "Файл пуст"
    Else
    objConnectionSer.Open "Provider=SQLOLEDB;Data Source=RadioX\FData;Database=northwind;User ID=sa;Password=0" 'строка подключения к skid
    rs.MoveLast: rs.MoveFirst 'прогон рекордсета на последнюю запись и назад к первой для правильного подсчета количества записей
    rs2.Open "[dbo].[Order Details]", objConnectionSer, 3, 3  'открываем рекордсет  таблицы Skid
    
    For i = 1 To rs.RecordCount 'цикл по записям рекордсета из excel
    If DCount("*", "[dbo_Order Details]", "[OrderID]=" & rs.Fields(0) & " and [ProductID]=" & rs.Fields(1)) = 0 Then
    rs2.AddNew
    rs2.Fields("OrderID") = rs.Fields("OrderID") '0
    rs2.Fields("ProductID") = rs.Fields("ProductID") '1
    rs2.Fields("UnitPrice") = rs.Fields("UnitPrice") '2
    rs2.Fields("Quantity") = rs.Fields("Quantity") '3
    rs2.Fields("Discount") = rs.Fields("Discount") '3
    rs2.Update
    End If
    If i < rs.RecordCount Then rs.MoveNext 'если переменная цикла не добралась до конца то двигаем рекордсет eXcel на следующую запись
    Next i
    End If
    Debug.Print "var Noobs Итого - " & Timer - t
    rs2.Close
    rs.Close
    Set rs = Nothing
    Set rs2 = Nothing
End Sub

Sub var_1()
    Dim con As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim r1 As ADODB.Recordset
    Dim r2 As ADODB.Recordset
    Dim r3 As ADODB.Recordset
    Dim s$, t1#, t2#, i&
    
    t1 = Timer
    Set r1 = New ADODB.Recordset
    r1.Open "select * from orderdetails", CurrentProject.AccessConnection, adOpenForwardOnly, adLockReadOnly
    
    Set con = New ADODB.Connection
    s = "Provider=SQLOLEDB.1;Data Source=RadioX\FData;Database=northwind;User ID=sa;Password=0"
    con.CursorLocation = adUseClient
    con.Open s
    
    s = "select 1 from [order details] where orderid=? and productid=?"
    Set cmd = New ADODB.Command
    cmd.CommandType = adCmdText
    cmd.CommandText = s
    cmd.ActiveConnection = con
    
    Set r2 = New ADODB.Recordset
    r2.Open "select * from [order details] where 1=0 ", con, adOpenStatic, adLockBatchOptimistic
    Set r2.ActiveConnection = Nothing
    r2.Fields("orderid").Properties("Optimize") = True
    r2.Fields("productid").Properties("Optimize") = True
    
    Set r3 = New ADODB.Recordset
    
    Do Until r1.EOF
        cmd.Parameters(0) = r1!OrderID
        cmd.Parameters(1) = r1!productid
        r3.Open cmd, , adOpenStatic, adLockReadOnly
        If r3.EOF Then
            r2.AddNew
            r2!OrderID = r1!OrderID
            r2!productid = r1!productid
            r2!UnitPrice = r1!UnitPrice
            r2!Quantity = r1!Quantity
            r2!Discount = r1!Discount
        End If
        r3.Close
        r1.MoveNext
     Loop
    Debug.Print "Var 1 Поиск - ", Timer - t1
    t2 = Timer
    
    Set r2.ActiveConnection = con
    r2.UpdateBatch
    
    On Error Resume Next
    r3.Close: Set r3 = Nothing
    r1.Close: Set r1 = Nothing
    r2.Close: Set r2 = Nothing
    
    Set cmd = Nothing
    con.Close: Set cmd = Nothing
    Debug.Print "Var 1 Вставка - ", Timer - t2
    Debug.Print "Var 1 Итого - ", Timer - t1
End Sub

Sub var_2()
    Dim con As ADODB.Connection
    Dim r1 As ADODB.Recordset
    Dim r2 As ADODB.Recordset
    Dim r3 As ADODB.Recordset
    Dim s$, t1#, t2#, i&
    
    t1 = Timer
    Set r1 = New ADODB.Recordset
    r1.Open "select * from orderdetails", CurrentProject.AccessConnection, adOpenForwardOnly, adLockReadOnly
    
    Set con = New ADODB.Connection
    s = "Provider=SQLOLEDB.1;Data Source=RadioX\FData;Database=northwind;User ID=sa;Password=0"
    con.CursorLocation = adUseClient
    con.Open s
    
    s = "select * from [order details] where 1 = 0"
    Set r2 = New ADODB.Recordset
    r2.Open s, con, adOpenStatic, adLockBatchOptimistic
    Set r2.ActiveConnection = Nothing
    
    s = "select * from [order details]"
    Set r3 = New ADODB.Recordset
    r3.Open s, con, adOpenStatic, adLockBatchOptimistic
    Set r3.ActiveConnection = Nothing
    r3.Fields("orderid").Properties("Optimize") = True
    r3.Fields("productid").Properties("Optimize") = True
    
    Do Until r1.EOF
        r3.Filter = ""
        r3.Filter = "orderid=" & r1!OrderID & " and productid=" & r1!productid
        If r3.EOF Then
            r2.AddNew
            r2!OrderID = r1!OrderID
            r2!productid = r1!productid
            r2!UnitPrice = r1!UnitPrice
            r2!Quantity = r1!Quantity
            r2!Discount = r1!Discount
        End If
        r1.MoveNext
     Loop
    Debug.Print "var 2 Поиск - ", Timer - t1
    t2 = Timer
    
    Set r2.ActiveConnection = con
    r2.UpdateBatch
    
    On Error Resume Next
    r1.Close: Set r1 = Nothing
    r2.Close: Set r2 = Nothing
    r3.Close: Set r3 = Nothing
    con.Close: Set con = Nothing
    Debug.Print "var 2 Вставка - ", Timer - t2
    Debug.Print "var 2 Итого - ", Timer - t1
End Sub

Sub data_prepare()
    Dim con As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim r As ADODB.Recordset
    Dim s$
    
    Set con = New ADODB.Connection
    s = "Provider=SQLOLEDB.1;Data Source=RadioX\FData;Database=northwind;User ID=sa;Password=0"
    con.CursorLocation = adUseClient
    con.Open s
    
    s = "delete from [order details] where orderid=? and productid=?"
    Set cmd = New ADODB.Command
    cmd.CommandType = adCmdText
    cmd.CommandText = s
    cmd.ActiveConnection = con
    
    Set r = New ADODB.Recordset
    r.Open "select * from [order details] ", con, adOpenStatic, adLockBatchOptimistic
    Set r.ActiveConnection = Nothing
    Do Until r.EOF
        If r.AbsolutePosition / 2 = r.AbsolutePosition \ 2 Then
            With cmd
                .Parameters(0) = r!OrderID
                .Parameters(1) = r!productid
                .Execute
            End With
        End If
        r.MoveNext
     Loop
    On Error Resume Next
    r.Close: Set r = Nothing
    Set cmd = Nothing
    con.Close: Set cmd = Nothing
End Sub


На моем компе получил такие результаты:
+
var Noobs Итого - 6.20375000000058
*******************
Var 1 Поиск -                0.781499999997322 
Var 1 Вставка -              0.484875000001921 
Var 1 Итого -                1.26587499999732 
*******************
var 2 Поиск -                0.203125 
var 2 Вставка -              0.515749999998661 
var 2 Итого -                0.71875 


Может, кто-нибудь покажет более быстрый способ?

http://www.sql.ru/forum/1199106/ispolzovanie-rekordseta-dlya-obnovleniya-poisk-i-vstavka-dannyh


Выборка данных из одной таблицы по совпадению

Пятница, 05 Февраля 2016 г. 10:30 + в цитатник
Здравствуйте.
Возникла потребность в выборке данных из таблица Access.
Есть таблица с примерно таким содержанием:

N1 N2 N3 N4 N5 N6
......
8 15 23 30 60 76
12 18 21 25 26 89
5 18 19 26 89 95
.....

Нужно выбрать следующим образом - если есть более трех совпадений с условием. Например 5 18 19 26


P.S. Не знаю насколько корректно описал.

http://www.sql.ru/forum/1199027/vyborka-dannyh-iz-odnoy-tablicy-po-sovpadeniu


Формула в графе

Четверг, 04 Февраля 2016 г. 23:58 + в цитатник
Я знаю как это решить в екселе, но не знаю, надеюсь пока, как сделать в Аксессе.

В графу А бутет заноситься числою которое в том числе содержит дату рождения например 18812145, 1988 год 12 - декабрь и 14 число. Как мне 18812145 перевесть в 14.12.1988?

http://www.sql.ru/forum/1198994/formula-v-grafe


Связка SQL Server + Access + Интернет

Четверг, 04 Февраля 2016 г. 17:45 + в цитатник
У клиентов есть задача, написанная на Access. И довольно большая, постоянно изменяющаяся база.
А у них свои клиенты, которым необходимо работать с этой задачей. Хозяева не хотят отдавать эту базу в чужие руки.
А хотят, чтоб клиенты работали с ней через интернет. Особенности базы: её изменять могут лишь хозяева, остальные могут только получать из неё различные выборки.
Делать соответствующий сайт и переводить всё на MySQL, PHP, ASP они то ли не хотят, то ли не могут (скорее второе, финансы). Вот они и крутятся, чтоб не переписывать задачу, а как-то ухитриться работать с ней удалённо через интернет.

Какие есть идеи?

Пока предложено следующее.
Первое предложение. Перевести базу на MS SQL Server, дать ему выход в интернет. Клиент оставить как Access.

Другое предложение. Попробовать использовать SharePoint. База то не меняется.

Третье предложение. Удалённый доступ через сервер терминалов (или терминальный сервер)

Сложность ещё в том, что у клиентов нет сильного админа (или вообще нет админа). И как всё это настроить - неизвестно.

Может кто-то создавал что-то подобное и поделится идеями или опытом?


-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?

http://www.sql.ru/forum/1198931/svyazka-sql-server-access-internet



Поиск сообщений в rss_sql_ru_access_programming
Страницы: 353 ... 190 189 [188] 187 186 ..
.. 1 Календарь