|
|
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
Сейчас складской учет фирмы где я работаю организован на связке Assecc2002+Связанные таблицы (mdb, архитектура файл-сервер). Набор накладных осуществляется в связанную таблицу, находящуюся на локальном компьютере пользователя. При сохранении происходит добавление данных из этой таблицы в базу данных на сервере. База и число пользователей растет и чувствую приближается день когда придется переходить на архитектуру клиент-сервер. Думаю это будет Acces+MS SQL Server 2000. Может быть знатоки и практики подскажут как лучше организовать процедуру набора и сохрания накладных в этом случае? Буду рад любой помощи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 13:31:40 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
>Думаю это будет Acces+MS SQL Server 2000 Имеется ввиду AccessADP? А обязательно сначала накапливать а потом вливать? по простому так вобще ничего не надо накладная сразу на серверной таблице основывается и все нормально ну если так уж получится что два юзера одну и туже запись исправляют то спросит сохранят изм или нет 2) точно так же можно работать с временной таблицей 3)точно так-же можно работать с созданным рядом временным mdb файлом 4)можно поизгалятся с оторванным ADO рекордсетом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 13:41:20 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ. 1. Да, это будет AccessADP. 2. Процесс набора выглядит следующим образом. Набивается шапка накладной. Потом начинается набор тела накладной: Артикул, количество. Таких позиций может быть много, но реально вряд ли больше 1000, чаще 10-100). В процессе набора происходит диалог с клиентом и, соответственно, редактирование позиций, их удаление. Процедура набора может занимать около часа (в зависимости от клиента). >>2) точно так же можно работать с временной таблицей Это на сервере создать? А она создается для каждого пользователя своя? Можно немного попобробнее? >>3)точно так-же можно работать с созданным рядом временным mdb файлом Я попробовал его подключить через связывание таблиц - получилось Представление, доступное только для чтения. Что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 14:03:29 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
mssql + access(mdb) шапка накладной собирается на клиенте без таблиц - в контролы, -детальная часть записывается в локальную (mdb) таблицу. при сохранении шапочная часть отправляется на сервер через хп - детальная заливается через ado UpdateBatch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 14:12:33 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
Планирую перейти на использование mssql+Access ADP. >>шапка накладной собирается на клиенте без таблиц - в контролы Так и думал. Спасибо. А вот про >>-детальная часть записывается в локальную (mdb) таблицу. можно поподробнее, т.к. при подключении mdb - файла через связывание таблиц - получается Представление, доступное только для чтения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 14:53:00 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
>Это на сервере создать? А она создается для каждого пользователя своя? >Можно немного попобробнее? у SQL есть временные таблицы таблицы начинаются с # и ## существуют пока жив создавший их конект с # видны только создавшему их конекту в связи с этим у ADP клиента есть определенные проблеммы (у него два конекта работают соотв для одного из них таблица видна не будет) с ## видны всем поэтому с ней проще, но придется обеспечить уникальность имени. тонкости реализации лучше поискать на форуме по Access с локальным MDB стоит связыватся только если необходимо чтобы временная накладная схранялась от сеанса к сеансу выглядит точно так же как это у тебя из под мдб происходит только формы в ADP основываеш на руками созданном DAO рекордсете потом через DAO выполняеш запрос к серверу на слив набора созданный в этом же MDB-ке MDB-к можно генерить автоматически типа не найден то создать запроса нет то создать делов немного Локальный Mdb-к юзается монопольно так что работает все очень шустро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 15:19:41 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
Латук - спасибо! >>с локальным MDB стоит связыватся только если необходимо >>чтобы временная накладная схранялась от сеанса к сеансу Это не требуется. Тогда как лучше делать? Я так понял что на сервере, через временные таблицы? А вариант через mdb ты написал для связки mssql+mdb? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 15:31:22 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
у меня клиент написан на mdb, поэтому проблем со связыванием таблиц нет если на ADP - создать рекордсет на таблице, расположенной в файле mdb и добавлять в него записи при формировании накладной. При заливке в сервер создать 2 рекордсета у меня так: Код: plaintext 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. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 15:36:45 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
to e_basil А как ты связываешься из mdb базы с SQL-Server'ом? Я так понял что у тебя и локальные таблицы и серверные в общем окне [Таблицы]? Я сейчас наоборот, в проекта ADP создал форму и связал ее (через DAO.Recordset) с базой mdb. ДАнные можно редактировать и добавлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 15:53:00 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
с сервером связываюсь через хп (в основном), а также через запросы к серверу и ADO-рекордсеты. Локальные таблицы не всегда оправданы. У меня с базой работают несколько специфических клиентов (загрузка из- и в- ккм, периодическая загрузка из других баз с обработкой на клиенте, выборочный обмен данными с удаленными клиентами, конструирование спецификаций и рецептур). В некоторых случаях промежеточные данные могут сохраняться на клиенте перед загрузкой на сервер, поэтому я выбрал вариант с локальными таблицами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 16:19:54 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
>Я сейчас наоборот, в проекта ADP создал форму и связал ее (через DAO.Recordset) с базой mdb Правильно А переливать данные через рекордсет это моветон так только 1С ники делают или те кто недавно с клипера пересел (без обид) описание метода с временными табличками можно найти на форуме Access если начал делать с локальным MDB то продолжай ничего плохого в этом нет еще и сервак меньше напрягается только потом не переливай через рекордсет а создай в mdb-ке запрос к серверу на INSERT в серверную таблицу где источником будет локальная и исполни его через DAO Execute Function GetServerName() As String 'Dim strStart As String 'strStart = Mid(cnn.ConnectionString, InStr(1, cnn.ConnectionString, "Data Source=") + Len("Data Source=")) ' 'GetServerName = Left(strStart, InStr(1, strStart, ";") - 1) GetServerName = cnn.Properties(22) End Function Function GetDBName() As String 'Dim strStart As String 'strStart = Mid(cnn.ConnectionString, InStr(1, cnn.ConnectionString, "Initial Catalog=") + Len("Initial Catalog=")) ' 'GetDBName = Left(strStart, InStr(1, strStart, ";") - 1) GetDBName = cnn.Properties(27) End Function Dim dbe As DAO.DBEngine Dim ws As DAO.Workspace Dim db As DAO.Database Set dbe = New DAO.DBEngine On Error Resume Next создаю временный MDB-k убивая старый если он есть Kill CurrentProject.Path + "\__tmp.mdb" Set db = dbe.Workspaces(0).CreateDatabase(CurrentProject.Path + "\__tmp.mdb", dbLangGeneral) формирую запрос чтобы ADP-к не ругался создай фантомный объект(пустую таблицу или запрос) на сервере с таким же именем "spq" Set q = db.CreateQueryDef("spq") 'Вот как в ADP формируется MDB-ный конект к серверу q.Connect = "ODBC;DRIVER={SQL Server};SERVER=" + GetServerName() + ";DATABASE=" + GetDBName() + ";Trusted_Connection=yes;dsn=;" q.SQL = "Тело запроса" q.Close db.Execute "Вперед с песней" или q.Execute ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 16:23:04 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
когда сохраняеш данные от сеанса к сеансу то надо создавать MDB-к и таблицы/запросы только если их еще нет а при открытии накладной если она уже есть на серваке то открывать штатным способом заполняя Form.RecordSource Иначе из локальной таблицы Set Me.Recordset = ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 16:29:15 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
Не стал ли этот топик ближе к форуму по Access ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 16:32:37 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
метод ADO UpdateBatch - это далеко не клиппер (хотя я его не знаю, также как и 1с, к сожалению). А работает метод очень прилично. Стараюсь уйти от DAO где возможно, так как планирую переписать клиента на .Net запросы к серверу использую чтобы получать с сервера наборы записей и с помощью SQL заливать их в локальные таблицы или как источник для форм readonly ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 16:39:46 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
>Не стал ли этот топик ближе к форуму по Access ?? Точно с самого начала ближе некуда туды его >так как планирую переписать клиента на .Net Дык класический ADO к ADO.NET не особо ближе чем DAO все равно по хорошему придется переписывать а с гетерогенными запросами DAO шустрее справляется но можно и через ADO только MDB источник придется открывать через opendatasours или openrowset для чего придется отслеживать права учетной записи под которой стартует сервер (чтобы она имела доступ к локальному MDB-ку) (или она от прав юзера сработает?надо попробывать) что ИМХО геморой что всеравно получится гораздо быстрее чем циклом по рекордсету даже учитывая время на закрытие файлы открытого в монопоьльном режиме. запрос в две строчки вьюха на MDB источник на раздва создается мастером ADP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2004, 18:05:50 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
IMHO зачем столько заморочек. Я делаю так --------------- Dim CN as connection, S1 as Recordset Set CN = Currentproject.connection Set S1 = New Recordset cn.execute "SELECT TOP 0 * INTO #ШапкаНакладной FROM ШапкаНакладной WHERE КодНакладной = 0" cn.execute "SELECT TOP 0 * INTO #ДанныеНакладной FROM ДанныеНакладной WHERE КодНакладной = 0" временные таблицы повторяют структуру основных После создания накладной (хоть весь день пусть создают, тока бы напругу не выбило) Cn.Execute "INSERT INTO ШапкаНакладной (Список полей) SELECT СписокПолей FROM #ШапкаНакладной" S1.Open "SELECT @@IDENTITY AS ID",Cn Cn.Execute "INSERT INTO ДанныеНакладной (КодШапки, Список полей) SELECT " & S1!ID & ", СписокПолей FROM #ШапкаНакладной" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 08:58:32 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
Латук и все, кто откликнулись - спасибо. Все по делу. to vma_mnt Насколько я понял ты делаешь все через временные таблицы на сервере, создавая их как копии основных. Я прав? В общем я понял что есть 2 основных идеи: Использовать локальные таблицы (mdb) или временные таблицы (на сервере). На мой взгляд проще и единообразнее использовать второй вариант. А что скажут специалисты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 12:47:34 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
Как я уже говорил если нет необходимости сохранять временную таблицу между сеансами то с временными таблицами мороки меньше. хотя они и создают доп нагрузку на сервер а с MDB это некое подобие .NET только там вместо только там подобие этих таблиц в памяти находится (DataSet) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 13:05:38 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
ЕЩЕ РАЗ СПАСИБО ЗА ПОМОЩЬ. Буду копаться. Вот и первый вопрос. Сделал как сказал vma_mnt (создал временную таблицу), но ее не видно в окошке таблиц. Хотя она создана, т.к. при повторной попытке создания Access пишет, что такой объект уже есть. Как все-таки увидеть эту таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 13:25:10 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
Вот еще IgorM делает так постоянная таблица в ее стоках при Inserte номер текущего процесса юзер работает с ней через вьюху с фильтром по процессу т.е. видит только свои строки тут хоть десять временных документов создавай и между ними переключайся после создания накладной временные строки подчищаются для случайно отвалившихся процессов по джобу (скажем ночью) отрабатывает сборщик мусора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 13:30:33 |
|
||
|
Как лучше организовать процедуру набора и сохранения накладной?
|
|||
|---|---|---|---|
|
#18+
поищи это уже обсуждалось дело в том что таблица видна только для создавшего ее конекта а для окна базы access использует отдельный конект для отладки используй таблицу с двумя ## или постоянную после убереш или добавиш # ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2004, 13:33:45 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32605855&tid=1673190]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 325ms |

| 0 / 0 |
