Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Сводная таблица с динамическими исходными данными
 
Добрый вечер!
Никак не могу справиться с возникшей задачей. Нужно создать базу в Экселе. Суть в том, что есть лист "База", где должны высвечиваться все работники, и листы с названием профессий ("Плотник", "Электрик" и т.д.). Можно ли с помощью Экселя сделать так, чтобы при вводе данных на одном из листов-профессий, в основную базу автоматически или одной кнопкой добавлялась информация? Другими словами, на листе-профессии я хочу видеть некоторый минимум оперативной информации о работнике, в листе "База" же нужно, чтобы были все работники, подтягивалась информация со всех листов. Если на одном из листов меняется информация о работнике, она меняется и в листе "База". Эксель 2010
Заранее спасибо за любые советы! :)  пример.xlsx (15.29 КБ)  
Изменено: Fed-Di - 6 Май 2015 23:15:29
 
Не понятно для чего это нужно и желание не понятное. Может лучше наоборот, на лист База вводить полную информацию, а на отдельном листе создать сводную таблицу из базы, с отображением не полной информации. Иначе как с листов -профессии
Цитата
на листе-профессии я хочу видеть некоторый минимум оперативной информации о работнике,
будет подтягиваться полная информация (Город; ключи) которой там нет. Сводных можно создать несколько, отдельно по каждой профессии, и разместить на листы.
Изменено: gling - 7 Май 2015 00:23:49
 
Цитата
gling написал: Сводных можно создать несколько, отдельно по каждой профессии, и разместить на листы.
1) реализацию этой удобной идеи TheBestOfTheBest описывал здесь: Разделить одну таблицу на несколько
2) но для реализации с точностью в обратном порядке
Цитата
Fed-Di написал:Если на одном из листов меняется информация о работнике, она меняется и в листе "База"... Можно ли с помощью Экселя автоматически или одной кнопкой?  
или изучать запросы-sql через Подключения (вкладка Данные), или писать макрос...
Изменено: JeyCi - 7 Май 2015 09:07:42
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
gling, Добрый день! Благодарю Вас за совет. Ваша идея действительно выглядит более удобной. Еще раз спасибо! :)

JeyCi, Добрый день! Вас так же благодарю за подробные рекомендации, ссылки и потраченное время :)
Изменено: Fed-Di - 7 Май 2015 12:56:16
 
Такую задачу можно реализовать с помощью плагина SaveToDB. Логика следующая: есть одна (!!!) таблица с данными, в которой есть все поля(столбцы) для всех профессий, есть несколько листов-представлений этой таблицы с обрезанными столбцами. Плагин даст возможность не только смотреть на одну таблицу разными листами, но и редактировать ее, добавлять/удалять строки если это надо.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
TheBestOfTheBest написал: реализовать с помощью плагина SaveToDB
есть свои нюансы (для многих полезных функций - ради которых интересно бы потестить):
Цитата
Требуется поддержка и настройка на стороне сервера, например, за счет установки SaveToDB Framework
но если есть смысл в разграничении прав доступа к базе - то, наверно, есть смысл хранить её на сервере... а организовывать сервер для нескольких файлов - я вот, например, до сих пор не могу найти мотивацию и смысл... :( не знаю, как разглядеть преимущества в том или ином способе обращения с БД (на начальных порах сложно разглядеть свои плюсы и свои минусы)...
p.s. видимо, не совсем free... т к даже personal-версия имеет цену... хотя, вроде, предлагают потом просто зарегистрировать express-версию... но пока не понятно, даст ли это ожидаемый эффект... удобства, комфорта и уюта 8) в работе с БД небольшого размера...
p.p.s. возможность плагина подгружать json-файлы - интересный пункт,  с которым не справляется сам (без макроса) xl ... (по крайней мере у меня)... остальное, вроде бы, и в xl можно реализовать, если продумать "верный" подход к БД
p.p.p.s за совет спасибо
Изменено: JeyCi - 9 Май 2015 10:12:10
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал: за совет спасибо
Вообще не то советовал. Про сервер речи не было, в полном понимании сервера. Вся база выполняется на MS SQL Server Compact, который не требует никаких дополнительных серверов.
Доступ разграничивать не требуется, нет смысла, можно данные запаролить, но это больше для понта, чем для защиты.
Смысл предложения в том, чтобы делать несколько представлений одной таблицы (не сводной) на базе Excel и плагина.
Плагин имеет бесплатную версию, требует регистрации. Этой версии хватит для большинства ваших задач.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
TheBestOfTheBest написал: Вообще не то советовал... Вся база выполняется на MS SQL Server Compact, который не требует никаких дополнительных серверов.
как до него добраться хотя бы, не подскажете?.. давно не могу найти...  вижу в Programme Files папку с таким названием, а в ней v.3.1 и v.3.5, а в них куча dll - и никакого интерфейса... как бы базу сделать на таком Compact? намекните please, где искать (или скрином или линком)?..
... насколько поняла - его надо ещё и установить - Установка Microsoft SQL Server Compact 3.5
Скрытый текст
________________
т.е. офис, наверно, тут не при чём - устанавливать это надо?... :idea: как вариант, но страшно...
Изменено: JeyCi - 10 Май 2015 19:36:51
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Последняя версия - 4.0, если установить плагин, Compact будет установлен по умолчанию. Это действительно несколько dll, которые запускаются при старте Windows. Они обеспечивают доступ через ODBC к файлу/ам *.sdf, для более глубокого ковыряния sdf я использую Visual Studio 2010
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
TheBestOfTheBest написал: реализовать с помощью плагина SaveToDB... Вся база выполняется на MS SQL Server Compact, который не требует никаких дополнительных серверов.
да, действительно, а я и не заметила - Подключение к Microsoft SQL Server (плагин SaveToDB) - "Плагин SaveToDB к Microsoft Excel позволяет подключаться к таблицам, представлениям и хранимым процедурам всех версий Microsoft SQL Server"

Скрытый текст
Изменено: JeyCi - 13 Май 2015 11:24:34
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
MS SQL Server Compact, в отличие от MS SQL Server, не поддерживает хранимые процедуры. Соответственно и плагин тоже. Вообще, MS SQL Server, MS SQL Server Compact и SaveToDB разные комплексы. Если MS SQL Server Compact достаточно установить и описать в ODBC, то SaveToDB - это надстройка, которая может управлять разными серверами, в т.ч. и MS SQL Server и MS SQL Server Compact и фриваре.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
TheBestOfTheBest написал: MS SQL Server Compact достаточно установить и описать в ODBC
если кто-нибудь заглянет в ветку - черканите please КАК?.. regsvr32??.. но как это делается... без установки SaveToDB... я пока попробую здесь посмотреть
Изменено: JeyCi - 11 Окт 2018 11:26:52
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 

Установила с линка выше ... Сделала через коммандную строку: regsvr32 "C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\sqlceoledb40.dll"
не помогло
Код
Sub Connect_SQL_ServerCE35()
Dim cn As Object
  Set cn = CreateObject("ADODB.Connection")
  cn.ConnectionString = ("Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=E:\NEW docs\Northwind.sdf")
  cn.Open
  Set Db = CreateObject("ADOX.Catalog")
  Db.ActiveConnection = cn
  For i = 0 To Db.Tables.Count - 1
      Debug.Print Db.Tables(i).Name
  NextDebug.Print Now
End Sub
это код работает для 3.5 Sample-файл ... но при поправке на 4.0 и на файл сделанный для 4.0 и с добавкой ";Password=text""- не работает... хотя отсюда -SQLite & SQL Server Compact Toolbox extension - подключение устанавливается - правда строку Подключения нигде не взять... ??
p.s. в VS2010 - тоже не появляется 4.0 - но это ещё можно понять - нет обновления SP1

Изменено: JeyCi - 11 Окт 2018 15:08:37
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
ошибка кстати - какая-то длинная - "произошли ошибки во время выполнении многошаговой  операции oledb - по возможности проверьте значения всех состояний OLEDB. Работа не выполнена" - так звучит
p.s.
даже так поставила: "SSCE:Database Password=text"  и .Mode=3 и .CursorLocation=3 ... никак... и даже одинарные кавычки вокруг text пробовала...
Изменено: JeyCi - 11 Окт 2018 15:37:37
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Синтаксис строк подключения MSSQLCompact Edition - наверное это известно, но на всякий случай

При переходе на версию 4.0 автоматом пере форматируется файл базы данных и вернуться на 3,5 уже невозможно, будьте бдительны!

SQLServerCE 4.0  был где-то установочный пакет, попробуйте его (см. картинку).

Но это сейчас не актуально уже. Переходите на SQLLocalDB, он полностью поддерживает объекты SQL server'а до версии 2016 (вроде) в последующих версиях отказались от LocalDB, т.к. LocalDB поставляется только с версиями Express.
1.PNG.png (54.96 КБ)
Изменено: TheBestOfTheBest - 11 Окт 2018 15:58:51
Неизлечимых болезней нет, есть неизлечимые люди.
 
СХОЖЕЕ описание ошибки (и номер её) - а кому-то повезло - отловил  :) ... меня же по cn.Open не пропускает... возможно дело где-то там... ??
Изменено: JeyCi - 11 Окт 2018 15:50:10
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
TheBestOfTheBest написал:
Переходите на SQLLocalDB, он полностью поддерживает объекты SQL server'а до версии 2016 (вроде) в последующих версиях отказались от LocalDB, т.к. LocalDB поставляется только с версиями Express.
упс, уже и тут отказались  :( ... хотя если руки дойдут - то Express и буду смотреть...
TheBestOfTheBest спасибо! за ликбез
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Файл то не разрушен после такого подключения?
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
JeyCi написал: даже так поставила: " SSCE:Database Password=text "  и .Mode=3 и .CursorLocation=3 ... никак...
вот после этого до строки DB.Tables уже дохожу (cn.Open пропускает)... но DB.Tables.Count=0 и ошибка такая же - про многошаговую операцию...  :) он (код), наверно, думает "тише едешь - дальше будешь"
Изменено: JeyCi - 11 Окт 2018 16:25:31
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
TheBestOfTheBest написал: Файл то не разрушен после такого подключения?
видимо - нет
Цитата
JeyCi написал: отсюда - SQLite & SQL Server Compact Toolbox extension  - подключение устанавливается
(мой #13) и SELECT * FROM tbl_uslugi  ;)  выполняется - перепроверила сейчас... спасибо за беспокойство... просто интересно без SaveToDB поюзать .sdf... но макрос из Excel останавливается, на цикле (как описала в предыдущем посту) - строка #8 из кода выше
Изменено: JeyCi - 11 Окт 2018 16:27:45
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 

отловила - нагородила всех свойств, что только смогла...

Код
Sub Connect_SQL_ServerCE()
Dim cn As Object
cn = CreateObject("ADODB.Connection")
With cn
    .ConnectionString = "Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;Data Source=E:\NEW docs\Услуги20.sdf;SSCE:Database Password=" & Sheets("Лист1").[b2].Value & ""
    Debug.Print .ConnectionString
    .CursorLocation = 3 'adUseClient
    .Mode = 3   'adModeReadWrite
    .Open
End With
Set rs = CreateObject("ADODB.Recordset")
rs.LockType = 3
sSql = "SELECT [Код] FROM [tbl_uslugi]"
rs.Open sSql, cn, adOpenStatic
    Arr = rs.GetRows
rs.Close
cn.Close
End Sub
но если заголовок поля состоит из 2х слов - тогда вылазит та ошибка...
на известном вам, TheBestOfTheBest, файле - поэтому и названия столбцов и таблиц из него... вобщем как-то так

Изменено: JeyCi - 11 Окт 2018 17:23:45
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
но если заголовок поля состоит из 2х слов - тогда вылазит та ошибка...
проверила всё - некоторые 2-словные заголовки столбцов проходят, что-то нет... вобщем не в этом суть... просто вывод: есть альтернативные способы ковырять sdf - что вобщем-то и хотела найти... спасибо и за ваши идеи
p.s. зная строку подключения - запросы и в DbConsole можно просмотреть
Изменено: JeyCi - 12 Окт 2018 14:57:25
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
TheBestOfTheBest написал: Переходите на SQLLocalDB, он полностью поддерживает объекты SQL server'а до версии 2016 (вроде) в последующих версиях отказались от LocalDB, т.к. LocalDB поставляется только с версиями Express.
смущает меня кстати в LocalDB (даже 2012) - его memory-share подключение вместо TCP/IP... при небольших размерах БД - видимо терпимо, а что делать потом... нет уж лучше нормальный SQL Server Express... но тоже: придётся и VisualStudio 2011 ставить, т.к. 2010(да ещё и не SP1) не даст создавать dbo2012 (только 2005/2008), а без него - SSMS Complete (50usd) - чтобы создавать dbo-файлы и править их, если всё равно стоит vs - как-то всё разбросано будет, да и не факт что понравится... а связываться с полноценным Сервером - тоже пока знаний поднасобирать надо... да и на настольном пк - хоть самолётом обзови, думаю, всё равно не взлетит по скорости - на таком-то железе, да ещё 32-й системе... то ли дело серверный винт (или хостинг, на облако вряд ли - просто вариант)... имхо - вот такие опасения о потерянном времени и загрузке памяти пока что
p.s.
пока стоит vs2010 - может и dbo(2008) посмотрела бы, чтоб познакомиться, обкатать, - но движок и драйвер (#67) всё равно устанавливать придётся - знать бы ставятся ли они без самого сервера?.. чтобы из эксельки поковырять?... .sdf CompactEdition уже установили чуть выше и подключились - оказалось не сложно... а для доступа к dbo (2008 пока в силу возможностей текущих) - пока не знаю, как достучаться..... буду думать, может созрею  :oops: ... Или найду какого простенького клиента БД?
Изменено: JeyCi - 12 Окт 2018 16:00:35
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал: пока стоит vs2010
вообще-то подключается к мастеру (который лежит в C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\master.mdf)
Код
Sub Connect_SQL_Server()
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
With cn
    .ConnectionString = "Provider=SQLOLEDB;Data Source=WIN-...........\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=master"
    Debug.Print .ConnectionString
    .CursorLocation = 3 'adUseClient
    .Mode = 3   'adModeReadWrite
    .Open
End With
Debug.Print cn.ConnectionString
cn.Execute ("INSERT INTO Table1(column_1, column_2) VALUES (12, 0)")
ThisWorkbook.Sheets("Лист1").[A1].CopyFromRecordset cn.Execute("SELECT * FROM Table1")
cn.Close
End Sub
значит и Server Express установился с VS2010 когда-то...
p.s.
всё: создала тестовую бд! - в ней таблицу - потом: -> Build-> Publish... (только в свойствах проектнойБД проставить имя сервера и выбрать Развёртывание после создания файла развёртывания)... и вуаля: оказалось тоже несложно... горизонты открыты, из xl подключение и заполнение бд настраивается макросом... вот и простенький клиент через ADO...
P.P.S но в качестве IDE всё-таки VisualStudio  
Изменено: JeyCi - 18 Окт 2018 15:56:15
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
А как будет выглядеть код с UPDATE или MERGE? Проблема как раз не считать/добавить, а обновить. т.к. серверу требуется указать id строк. Как мы определим какие строки надо апдейтить, а какие нет?
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
TheBestOfTheBest написал:
А как будет выглядеть код с UPDATE или MERGE? Проблема как раз не считать/добавить, а обновить. т.к. серверу требуется указать id строк
1) а Update с вложенным Select'ом  не сработает разве - на условном примере
Код
UPDATE
BOX a INNER JOIN (SELECT ID, Cur FROM Box IN "D:\Base1.mdb") b ON
a.ID = b.ID SET a.PREDID = b.Cur 
2) или как-то так (на условном примере)
Код
UPDATE OPT, ITM SET OPT.ITM = ITM.ITM, OPT.TV = ITM.TV
WHERE (OPT.tradeDate = ITM.tradeDate) AND (OPT.TK= ITM.TK) AND (OPT.settlementDt = ITM.settlementDt) 
AND (OPT.strike= ITM.strike) AND (OPT.type= ITM.type) 
допустим OPT - табл из БД, ITM - клиентская табл (в xl)...
хотя да это не вариант - уже вижу - подключение к разл. источникам здесь...
=====
3) Тогда через ADO Join'ом ... -- условные примеры SQL
Код
e.g. UPDATE Results AS A INNER JOIN [SELECT ShortNameR,Name FROM Result
IN "C:\2.mdb"]. AS B ON (A.Name =B.Name) AND
(A.ShortNameR=B.ShortNameR) SET A.VOl_R = B.Vol_R; 

e.g. : UPDATE tblAddress INNER JOIN tblZipCodes ON
[tblAddress].[ZipCode] = [tblZipCodes].[ZipCode]
SET [tblAddress].[City] = [tblZipCodes].[City], [tblAddress].[State] =
[tblZipCodes].[State] WHERE ([Country] = 'US')

4) или перебор строк xl'я и Update RS'а от Server'a
-- думаю так - но не тестила ещё...
5) 8) а есть и ход конём: загнать данные xl'я на сервак отдельной табл
Код
SELECT q_ITM.* INTO ITM FROM q_ITM
 -- и там на месте джойнить, что хочется  ;)  ...
ИЛИ вы предложите альтернативный вариант ? (как вариант)
Изменено: JeyCi - 18 Окт 2018 15:32:03
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
P.P.S но в качестве IDE всё-таки VisualStudio  
оно судя по всему, вероятно, ещё и в качестве CASE может использоваться??.. не знаю насколько продуктивно??.. хм... хотя есть нюансы: Microsoft извлек уроки из опыта индустрии, и планирует избежать подводных камней CASE  :( - не понятно есть ли нормальный CASE в Visual Studio, или нет -- и нужен ли при моделировании... (или это уже прошлый век?)
p.s.
кстати хорошую книгу полистала (рекомендую всееем начинающим) - если найдёте (в сети не вижу - а то бы оставила линк) -- но мне понравилась, как Дающая выбор структуры данных, для использования в проектировании бд (Модели Данных - иерархические, сетевые, ER, многомерные, ООМД, ОРМД)... хоть в книге примеры и скрины из Power Designer в качестве CASE-средства -- но все основы Проектирования разложены по полочкам, как для меня - чтобы наконец осмысленно выбирать , что нравится, -- помимо уже пройденного (массивы, словари, коллекции) для более ресурсоёмких задач (деревья, графы, ER, Dimensions)....  Хранилища данных и Аналитики... и конечно же про этапы проектирования... - вобщем очень интересно для разграничения понятий и новых терминов... даже почувствовала себя более подкованной   8) после прочтения (пролистывания)...
! Проектирование баз данных : учебное пособие для студентов вузов /  Л. В. Рудикова . – Минск : ИВЦ Минфина, 2009
спасибо автору ! - теперь есть из чего выбирать - с пониманием ! - хотя дома держать сервер всё-равно как-то не comme ils faut... имхо... для рабочих моментов
Изменено: JeyCi - 19 Окт 2018 14:40:53
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
TheBestOfTheBest написал: Как мы определим какие строки надо апдейтить, а какие нет?
по первичному ключу
p.s.
ещё мне кажется по логике подходов можно рассмотреть пару вариантов:
6)
Код
BEGIN TRANSACTION
Conclude a transaction by committing all work performed during the transaction.
COMMIT [TRANSACTION | WORK]
Conclude a transaction by rolling back all work performed during the transaction.
ROLLBACK [TRANSACTION | WORK]
были и на планете примеры транзакций через ADO - BeginTrans (правда, вставка) и пример Begin Transaction - PQ
... если проставлять по ходу изменений в доп столбце xl пометку об изменениях - то можно как-то так (чтобы не лопатить весь сервер - по выбранному сиолбцу )  (можно через Application.InputBox дописать в начале выбор) :
Код
'подключение см. выше...
Set RS = CreateObject("ADODB.Recordset")
RS.LockType = 3     ' adLockOptimistic
sSql = "SELECT * FROM tblMyDone "
RS.Open sSql, cn, adOpenKeyset
     
changeToDB = Sheets(1).[A1].CurrentRegion.Value
     
    cn.BeginTrans
    For i = LBound(changeToDB, 1) + 1 To UBound(changeToDB, 1)  'без шапки
        Select Case changeToDB(i, 5)
        Case "CHANGED"
            RS.MoveFirst
            RS.Find "column_1=" & changeToDB(i, 1) & ""         ' Find Primary Key
            RS.Fields(NName).Value = changeToDB(i, N)            ' Change data in edit buffer
        End Select
    Next
     
'    RS.Update
    If MsgBox("Update all changes?", vbYesNo) = vbYes Then      ' Prompt user to "Use Update to replace the original data with the buffered data in the Recordset"
        RS.Update
    Else
        RS.CancelUpdate
    End If
     
'    cn.RollbackTrans
    If MsgBox("Save all changes to DB?", vbYesNo) = vbYes Then    ' Prompt user to commit all changes made
        cn.CommitTrans
    Else
        cn.RollbackTrans
    End If
 
RS.Close
cn.Close

==========или
changeToDB = Sheets(1).[A1].CurrentRegion.Value
    
    For i = LBound(changeToDB, 1) + 1 To UBound(changeToDB, 1)  'без шапки
        Select Case changeToDB(i, 5)    '<<<<< (acc. CHG)
        Case "CHANGED"
            cn.Execute "UPDATE tblMyDone SET " & NName & " = " & changeToDB(i, N) & " WHERE column_1 = " & changeToDB(i, 1) & ""
        End Select
    Next
    
cn.Close
7) подумать на самом сервере - Stored Procedures как запускать из xl?..
ИЛИ лучше ADO команду с параметром (как замена хр.проц.сервера) выполнить со стороны клиента (NName - столбец по которому изменения, column_1 primary key):
Код
'подключение см. выше...
changeToDB = Sheets(1).[A1].CurrentRegion.Value
    
    Set cmd = New ADODB.Command
    cmd.ActiveConnection = cn
    cmd.CommandText = "UPDATE tblMyDone SET " & NName & " = ? WHERE column_1 = ?"
    cmd.CommandType = adCmdText
    
For i = LBound(changeToDB, 1) + 1 To UBound(changeToDB, 1)  
     cmd.Execute Parameters:=Array(changeToDB(i, N), changeToDB(i, 1))
Next    
Set cmd = Nothing
cn.Close
p.s.
хотя честно говоря, ещё ничего не тестировала... т.к. 1-ое с чем считаю важным  познакомиться при старте осваивания инструментов Visual Studio - это развернуть тестовуюБД (уже нашла кнопки), И ! Индексация и ! тест ! скорости выполнения запросов при данной Индексации (чтобы если не ускоряют - удалить индексы - надо освоить тесты)... и вообще мне кажется, что основная работа по созданию БД - это после проектирования, создания и загрузки всех данных, - прогон всех тестов на целостность и скорость работы БД - наверно, занимает больше всего времени... имхо... потом раздать права доступа админу, начальству и юзерам... и потом периодически тестировать скорость при настроенной индексации "по полям объединения и фильтрации" и первичным ключам в обязательном порядке (по мере заполнения бд)
Изменено: JeyCi - 23 Окт 2018 16:02:51
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Страницы: 1
Читают тему (гостей: 1)
Наверх