Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
MS SQL Server - дело тонкое...
#028<<#029
СОВЕТЫ
Размещение данных в одной или нескольких базах данных.
По материалам статьи: http://www.sqlteam.com/Site/About.asp#RocketScientist «Single Database or Multiple Databases»
Как DBA, так и разработчиков приложений для SQL сервера
часто интересует, что является более эффективным: использование одной базы
данных с большим количеством таблиц или лучше иметь несколько, логически
сгруппированных баз, каждая из которых имеет меньшее число таблиц. Также, часто
возникают вопросы о необходимости размещения базы данных в группе файлов.
Общая эффективность сервера существенно не зависит от того, используете Вы одну большую базу данных или
несколько меньших баз. Это объясняется тем, что SQL сервер имеет один кэш
данных, который используется для буферизации всех имеющихся баз.
С другой стороны, если ваши таблицы разнесены в разные базы, при необходимости восстановления базы или исполнения
сервисных операций, блокирующих доступ к одной из таблиц, Ваши пользователи
смогут работать с теми базами, которые работоспособны в этот момент. Например,
вы можете для приложения учёта товаров разнести данные по заказам, их
исполнению и состоянию склада в разные базы. Такой подход позволит Вам, при
необходимости, обеспечить доступ к данным из двух баз, при проведение работ над
третьей. Если вы избрали этот путь, Вам необходимо помнить, что для
резервирования/восстановления нескольких баз потребуется больше времени, чем
для восстановления одной. Если Ваши данные занимают 10Гб, то, как вы их не
дробите на несколько меньших баз, у вас всё равно останется 10Гб данных.
Естественно, для проведения регламентных и иных работ на нескольких базах
данных потребуется больше администраторского времени.
Группы файлов (Filegroups) выгодно использовать, чтобы разнести данные на несколько дисковых массивов. Так, если
Вы имеете систему с тремя каналами RAID (например, Compaq Proliant 8000), имеет
смысл разнести большую базу данных на два из них, а не третий поместить журнал
транзакций. Если Вы достаточно хорошо знаете структуру Ваших данных, это
позволит разбить базу данных на несколько файлов и балансировать трафик к этим
файлам. Эффективность дисковых операций возрастёт, за счёт того, что дисковые
массивы будут работать независимо друг от друга, что позволит Вам лучше
использовать пропускную способность, как RAID контроллера, так и PCI шины.
ГОТОВИМСЯ К ТЕСТУ ПО 70-028
ШПАРГАЛКА #6 Продолжение (обзор официального курса Microsoft)
Архив шпаргалок Вы найдёте на следующих сайтах:
http://mssqlhelp.com.ru
http://subscribe.ru/archive/comp.soft.winsoft.sqlhelpyouself
Резервный сервер
Оператор RESTORE имеет ещё одно применение, отличное от задачи восстановления данных. Это перенос данных в специально сознанный для этого резервный сервер. Резервный сервер представляет собой специально выделенный для этих целей компьютер с установленным на нём SQL сервером, базы данных которого могут быть быстро приведены к точной копии основного сервера. Основное назначение такого сервера, это замена основного для снижения времени простоя. Однако возможно и другое его применение, способное снизить нагрузку на основной сервер. Если базы данных резервного сервера сделать доступными для чтения пользователей, то, таким образом, Вы сможете переключить нагрузку с основного на резервный сервер для приложений, которым не нужно вносить изменения в данные (например, для задач принятия решений). Также, наличие резервного сервера может облегчить DBA некоторые сервисные и профилактические функции, за счёт того, что их можно будет выполнять на резервном сервере или быстро переключить туда пользователей с основного, что бы провести необходимые работы. Например, таким образом можно производить разнообразные проверки данных утилитой DBCC (Database Consistency Checker), в целях выявления ошибок в их структуре или повреждений. Как правило, такие проверки занимают очень много времени и значительно увеличивают нагрузку на сервер, что мешает работать пользователям. С помощью резервного сервера выполнять проверку баз данных, а также проверку резервных копий после каждого их восстановления очень удобно. Полный синтаксис оператора RESTORE был приведен в 27-м выпуске рассылки http://mssqlhelp.com.ru/027.shtml.
Процесс создания резервного сервера не является сложной процедурой. Для этого Вы должны иметь необходимые актуальные копии системных и пользовательских баз данных и их журналов транзакций, которые потом восстанавливаются на резервный сервер. Т.к. местоположение баз меняется, в качестве одного из параметров оператора RESTORE нужно будет использовать MOVE…TO. Восстановление на резервный сервер происходит в режиме NORECOVERY или STANDBY. Регенерация данных не должна выполняться до тех пор, пока не возникнет необходимость замены основного сервера резервным. Если Вы выполнили регенерацию данных на резервном сервере, это позволит пользователям к нему подключаться, но не позволит Вам восстанавливать на нём следующие копии журнала транзакций.
Если же резервный сервер будет использоваться в режиме доступа только для чтения, выполнять регенерацию нет необходимости. Для обеспечения такого режима используют параметр STANDBY, который позволяет пользователям читать данные с резервного сервера, а также, восстанавливать на нём следующие копии журнала транзакций. При этом параметр базы данных dbo use only должен быть установлен в FALSE. Доступ к серверу в режиме чтения будет возможен только в промежутках между восстановлением резервных копий баз и журналов. При использовании оператора STANDBY создаётся файл отмены с расширением ldf, аналог журнала транзакций. В нём хранятся изменения, отменяемые при восстановлении следующих копий журнала. Если файл отмены не существует, он будет создан автоматически. В аргументе оператора STANDBY можно задавать один и тот же файл. Тогда сервер будет перезаписывать содержимое этого файла, при условии, что в существующем нет информации для отмены изменений в базе данных. Размер файла отмены изменяется автоматически и ограничен только объёмом свободного дискового пространства. Ещё одним замечательным свойством оператора STANDBY является то, что с его помощью можно определить момент возникновения сбоя, приведшего к повреждению базы или согласованности данных. Поскольку восстановление резервных копий с этим параметром делает базу данных доступной для доступа, можно запускать диагностические утилиты или запросы, с помощью которых определять наличие недопустимых данных. Процедура поиска момента сбоя сводится к следующему: Вы восстанавливаете резервную копию базы и начинаете поочерёдно восстанавливать копии журнала транзакций. После восстановления каждой копии журнала выполняется утилита DBCC или запускается скрипт, проверяющий корректность данных. На каком - то этапе Вы зафиксируете с помощью используемых диагностических средств наличие сбоя. После этого, Вы будете точно знать, что Вам нужно восстановить из резервных копий (а именно, набор копий базы и журнала) до того момента, когда произошёл сбой. Восстановив не содержащие деструктивные или не правильные действия копии, Вы сможете привести Вашу базу данных к тому состоянию, которое было до момента сбоя.
Рассмотрим пример использования оператора STANDBY для резервного сервера базы Northwind. Нам необходимо обеспечить доступ пользователей для чтения базы данных на резервном сервере. Имена файлов базы на обоих серверах одинаковы:
USE master
RESTORE DATABASE Northwind FROM NorthwindBackupDevice
WITH STANDBY = ‘E:\ NorthwindUNDO.ldf’
RESTORE LOG Northwind FROM NorthwindLogBackupDevice
WITH STANDBY = ‘E:\NorthwindUNDO.ldf’
Выполнение резервных копий основного сервера должно выполняться на регулярной основе и с той периодичностью, которая необходима для поддержания актуальности данных резервного сервера. После каждого копирования журнала транзакций эта копия должна восстанавливаться на резервный сервер. Использование параметра NORECOVERY позволяет сделать резервный сервер недоступным пользователям до момента замены им основного, когда будет выполнена регенерация баз данных.
Поддержание базы данных резервного сервера в актуальном состояние для меня представляется в виде следующей процедуры: Вначале, определив стратегию резервного копирования, Вы заводите расписание заданий на создание необходимых полных/разностных резервных копий и копий журнала транзакций. Запросы, содержащиеся в расписании заданий, можно дополнить заданием на восстановление только что резервированной базы или журнала на резервном сервер. Для передачи задания резервному серверу на восстановление только что сделанной копии можно использовать системные хранимые процедуры, обслуживающие MS Mail, описание которых было изложено в 18-м выпуске рассылки http://mssqlhelp.com.ru/018.shtml.
Для того, что бы заменить основной сервер резервным, необходимо кроме уже имеющихся резервных копий выполнить копирование журнала с параметров NO_TRUNCATE. После этого можно отключать основной сервер, переименовать резервный и восстановить на нём последние копии. Самую последнюю копию восстанавливают с параметром RECOVERY. С этого момента сервер готов к работе. Обратный процесс требует несколько больше времени. Вы должны сделать полную копию на резервном сервере и копию журнала, а потом отключить его. Эти копии восстанавливаются на основном сервере, после чего он активизируется. Далее, на основном сервере опять выполняется резервное копирование, копии восстанавливаются на резервный сервер, так, как это было описано выше.
Восстановление системных баз данных
Необходимость восстановления системных баз данных может быть вызвана их повреждением или повреждением носителей, где они располагаются. Существует два пути их восстановления, это восстановление с актуальной резервной копии (если сервер удаётся запустить) или перестройка этих баз с помощью запуска из командной строки утилиты rebuildm.exe, находящейся в каталоге BINN. Перестроенные базы будут записаны поверх существующих. Если сохранились их копии, то, после перестройки, можно восстановить копии системных баз данных (в случае, если сервер не запускался). Если у вас нет резервной копии базы данных master, необходимо заполнить её вручную, используя MS SQL SEM или, если таковые имеются, исходные сценарии заведения пользователей, создания файлов баз и журналов, устройств резервирования, а также учётных записей подключения и глобальных серверных ролей. После восстановления master Вы можете приступить к восстановлению базы msdb. Если вы использовали вариант с перестройкой системных баз, содержимое базы msdb будет утеряно и Вам потребуется (ели нет резервной копии) восстанавливать все расписания вручную.
Если Вам удалось восстановить базу master, то для обеспечения доступа к пользовательским базам больше ничего не требуется. Если master была восстановлена путём её перестройки, Вы можете подключить к ней пользовательские базы путём восстановления из резервной копии или присоединения с помощью системных хранимых процедур sp_attach_db и sp_attach_single_file_db. Этот вариант хорош тем, что не требует наличия резервных копий баз данных и не нужно тратить время на их восстановление. Вот пример присоединения к базе master базы Northwind
USE master
EXEC sp_attach_single_file_db @dbname = ‘Northwind’,
@physname = ‘E:\Northwind.mdf’
Вопросы для повторения
ВОПРОС 1
Что такое процесс автоматической регенерации и когда он запускается?
Ответ
Автоматическая регенерация выполняется при каждом повторном пуске сервера SQL Server. В ходе этого
процесса происходит откат или завершение транзакций в целях сохранения
целостности базы данных после сбоя системы.
ВОПРОС 2
Какие действия необходимо предпринять перед восстановлением базы данных?
Ответ
Разрешите доступ к базе данных только ее владельцу (параметр «dbo use only»). Затем сделайте резервную копию
журнала транзакций с тем, чтобы применить ее после завершения операции
восстановления.
ВОПРОС 3
У вас есть полная резервная копия базы данных и несколько резервных копий журнала транзакций. База данных
размещена в четырех файлах. Диск, на котором находится третий файл, дает сбой.
Что следует сделать для восстановления и регенерации базы данных?
Ответ
Разрешите доступ к базе данных только ее владельцу (параметр «dbo use only»). Сделайте резервную копию журнала
транзакций с тем, чтобы применить ее после завершения операции восстановления.
Замените или отремонтируйте диск. Восстановите третий файл базы данных,
используя в качестве источника полную резервную копию. Восстановите все
резервные копии журнала транзакций, задав параметр NORECOVERY. Восстановите
последнюю резервную копию журнала транзакций с параметром RECOVERY.
ВОПРОС 4
У вас есть полная резервная копия базы данных и несколько резервных копий журнала транзакций. В 9:21 произошло
недопустимое обновление базы данных. Сейчас 9:30. Что следует сделать для
восстановления базы данных и приведения ее в согласованное состояние?
Ответ
Разрешите доступ к базе данных только ее владельцу (параметр «dbo use only»). Восстановите базу данных, задав
параметр NORECOVERY. Примените все копии журнала транзакций, кроме последней, с
параметром NORECOVERY. Примените последнюю копию журнала транзакций, задав
параметры RECOVERY и STOPAT = 'месяц, число, год, время', где указано время
9:20.
ВОПРОС 5
В ситуации, описанной в вопросе 4, будут ли при восстановлении потеряны какие-либо изменения?
Ответ
Если между 9:20 и 9:30 были выполнены какие-либо действия, эти изменения будут утрачены.
ВОПРОС 6
Вы установили резервный сервер SQL Server, используемый только для чтения. Чтобы необходимо сделать для того,
чтобы этот резервный сервер мог заменить основной сервер?
Ответ
Если удастся, выполните резервное копирование журнала транзакций основного сервера без усечения журнала.
Отключите основной сервер и замените имя резервного сервера SQL Server на имя
основного сервера. Восстановите все имеющиеся журналы транзакций на резервный
сервер SQL Server и затем проведите регенерацию базы данных.
Коней шпаргалки #6
Продолжение следует
ПОЛЕЗНОСТИ
На сервере издательства «Открытые Системы» osp.ru, журнал «SQL Magazine OnLine» #04-2000, опубликована статья
Кэлен Дилани: «Прямой доступ». Если ни один способ легального доступа к
метаданным, хранящимся в системных таблицах, не помогает, остается напрямую
обратиться к этим таблицам…
Другая статья, также расположенная
на этом сервере, посвящёна теоретическим вопросам разработки приложений БД.
Авторы О. Полукеев и Д. Коваль в статье «Моделирование бизнеса и архитектура
информационной системы» раскрывают некоторые подходы к CASE (Computer Aided
Software Engineering) технологиям.
http://www.osp.ru
Вы можете скачать SQL Server 2000 Meta Data Services SDK 3.0 (6.7MB)
http://msdn.microsoft.com/code/sample.asp?url=/msdn-files/027/001/475/msdncompositedoc.xml
Также, доступен для скачивания XML для SQL Server 2000 Web Release 1 Beta 2
http://msdn.microsoft.com/code/sample.asp?url=/msdn-files/027/000/625/msdncompositedoc.xml
Предлагаю Вам ознакомиться со статьями на сайте Глеба Уфимцева:
http://www.gvu.newmail.ru/
Сервис многократного 'UNDO' в многопользовательской
системе, построенной на основе MS SQL Server. Допустим,
пользователь-оператор, исправил, добавил или удалил какую-либо запись в БД или
совершил какую-либо транзакцию (нажав соотв. кнопочку на формочке), приведшую к
группе изменений данных, а затем, спустя некоторое время, понял, что сделал
неправильную операцию (сделал разноску платежей не по тем счетам, например). В
такой ситуации пользователь, осознав весь ужас своей ошибки, горит порывом тут
же исправить ситуацию, дабы избежать жесточайших мук, если уж не возможности
лишиться премии, то, по крайней мере, душевных. Статья предлагает способы
такому оператору помочь…
Создание Extended Stored Procedure для MSSQL средствами Delphi. Расширенная хранимая процедура из
примера в этой статье действует так: Создаёт файл, с именем, указанным первым
параметром и записывает в этот файл строку, заданную вторым параметром. Выводит
сообщение в ISQL о значениях параметров (из приложения этого сообщения не
видно). В случае ошибки, например, использование вместо строки с именем файла
числа, вы получите сообщение об ошибке, точно такое же, какое дает RAISERROR…
Новые технические статьи Microsoft:
Q224453 - INF: Understanding and Resolving SQL Server 7.0 and 2000 Blocking Problems
http://support.microsoft.com/support/kb/articles/Q224/4/53.ASP
Q239794 - INF: Changes to SQL-DMO Objects in SQL Server 7.0
http://support.microsoft.com/support/kb/articles/Q239/7/94.ASP
Q246133 - INF: Transfer Logins and Passwords Between SQL Server 7.0 or SQL Server 2000 Servers
http://support.microsoft.com/support/kb/articles/Q246/1/33.ASP
Q280134 - PRB: Error When You Create SQL Server TEMP Tables Using Remote Data Objects (RDO)
http://support.microsoft.com/support/kb/articles/Q280/1/34.ASP
Q279755 - INFO: Visual Basic and Arithmetic Precision
http://support.microsoft.com/support/kb/articles/Q279/7/55.ASP
Q240205 - PRB: ADO Parameters. Refresh Fails with MSDAORA Provider and Parameterized Query
http://support.microsoft.com/support/kb/articles/Q240/2/05.ASP
Q272270 - HOWTO: Retrieve XML Data in ASP with the XML OLE-DB Simple Provider
http://support.microsoft.com/support/kb/articles/Q272/2/70.ASP
Q280082 - PRB: SQL Server CE Queries with WHERE and ORDER BY Clauses May Run Slow
http://support.microsoft.com/support/kb/articles/Q280/0/82.ASP
Q280352 - HOWTO: Install SQL Server CE from Command Line and Generate Log
http://support.microsoft.com/support/kb/articles/Q280/3/52.ASP
Q280404 - PRB: Cannot Update Partitioned Views After Altering Table Constraints
http://support.microsoft.com/support/kb/articles/Q280/4/04.ASP
Q280406 - PRB: Infinite Loop with Dynamic Cursors and Clustered Index Key
http://support.microsoft.com/support/kb/articles/Q280/4/06.ASP
Q280468 - BUG: SELECT with GROUP BY ALL in Nested Correlated Subquery Error
http://support.microsoft.com/support/kb/articles/Q280/4/68.ASP
Q280514 - HOWTO: Use AppendChunk and GetChunk with NText Columns in SQL Server
http://support.microsoft.com/support/kb/articles/Q280/5/14.ASP
Q280759 - PRB: SQL 7.0 VDI Backup Fails When SQL 2000 Is on Same Computer
http://support.microsoft.com/support/kb/articles/Q280/7/59.ASP
Q280836 - BUG: 'Read From Remote' Does Not Display Registered Servers
http://support.microsoft.com/support/kb/articles/Q280/8/36.ASP
Q281346 - BUG: Fetch From a Dynamic Cursor Causes an Access Violation
http://support.microsoft.com/support/kb/articles/Q281/3/46.ASP
Q281617 - FIX: SQLMAINT Backup to Tape with Verify Only Checks First File
http://support.microsoft.com/support/kb/articles/Q281/6/17.ASP
Q281912 - PRB: sp_detach_db Message Incorrectly Implies That it Drops DB
http://support.microsoft.com/support/kb/articles/Q281/9/12.ASP
Q282175 - BUG: Parallel Query on Four CPUs Using NLS Is Slower Than Two
http://support.microsoft.com/support/kb/articles/Q282/1/75.ASP
Q282279 - FIX: Server Shut Down Occurs with Execution of sp_OACreate
http://support.microsoft.com/support/kb/articles/Q282/2/79.ASP
Q283040 - INF: Readme.txt for SQL Server 7.0 SP3 (continued) (This in addition to the original
Q274798 - INF: Readme.txt for SQL Server 7.0 Service Pack 3)
http://support.microsoft.com/support/kb/articles/Q283/0/40.ASP
Q254321 - INF: Clustered SQL Server Do's, Don'ts and Basic Warnings
http://support.microsoft.com/support/kb/articles/Q254/3/21.ASP
Q255749 - BUG: xp_cmdshell Does Not Display Last Line of Command Output
http://support.microsoft.com/support/kb/articles/Q255/7/49.ASP
Q264155 - INF: Reset Proxy and the SQLAgentCmdExec Account
http://support.microsoft.com/support/kb/articles/Q264/1/55.ASP
Q272115 - PRB: Stored Procedure Still Marked for Replication May Cause Stack Dumps
http://support.microsoft.com/support/kb/articles/Q272/1/15.ASP
Q263889 - INF: SQL Blocking Due to [[COMPILE]] Locks
http://support.microsoft.com/support/kb/articles/Q263/8/89.ASP
Q269882 - HOWTO: Use ADO to Connect to a SQL Server That Is Behind a Firewall
http://support.microsoft.com/support/kb/articles/Q269/8/82.ASP
Q281117 - BUG: Timeout Error Occurs with Large Dimensions in Dimension Editor or Wizard
http://support.microsoft.com/support/kb/articles/Q281/1/17.ASP
Q281122 - INF: Restore File and Filegroup Backups in SQL Server
http://support.microsoft.com/support/kb/articles/Q281/1/22.ASP
Q279033 - INF: Identifying Cascading Referential Integrity from SQL Server Profiler
http://support.microsoft.com/support/kb/articles/Q279/0/33.ASP
Q279642 - PRB: SQL Server 2000 Virtual Server Setup Error: "The Drive Chosen for the Program Files Installation Path <C:>, Is Not a Valid Path on All the Nodes of the Cluster"
http://support.microsoft.com/support/kb/articles/Q279/6/42.ASP
Q279552 - HOWTO: Delete a SQL Server CE Database in an Application
http://support.microsoft.com/support/kb/articles/Q279/5/52.ASP
Q279153 - INF: Upgrade Wizard Does Not Transfer Existing Stored Procedures
http://support.microsoft.com/support/kb/articles/Q279/1/53.ASP
Q279489 - INF: How to Connect to Analysis Server 2000 By Using HTTP Connection
http://support.microsoft.com/support/kb/articles/Q279/4/89.ASP
Q278667 - BUG: Sqlmaint Does Not Delete Expired Backup Files on Windows 95, 98 or ME Computers
http://support.microsoft.com/support/kb/articles/Q278/6/67.ASP
ТЕМА ДЛЯ ОБСУЖДЕНИЯ
Variant, UDF и Instead-триггеры, цепляемые ко view.
Недавно я получил письмо, в котором Андрей Гордиенко предлагает обсудить новые возможности и новые проблемы MS SQL Server 2000. Вот что он пишет:
Лично меня очень заинтересовали Variant, UDF и Instead-триггеры, цепляемые ко взгляду (от автора рассылки: на сколько я понял, имеется ввиду представление - view). Для меня эти три возможности, продекларированные для новой версии, в корне меняют подходы к тем проблемам, которые я пытаюсь решить в версии 7.0 с помощью совершенно неприспособленных для этого методов. Хочу найти единомышленников из числа тех, для кого переход на версию 2000 является жизненной необходимостью. Рассчитываю на отклики тех, кто её пощупал и смог обойти подводные камни, на которые я наткнулся.
Я пытался сделать тестовую установку, и сразу столкнулся с множеством проблем, о которых и хочу предупредить потенциальных или фактических собратьев по несчастью.
Я создал таблицу и взгляд, который выбирал некоторую часть записей из этой таблицы и одновременно ограничивал набор полей только "рабочими" полями (часть полей используется для журнализации и прочих служебных целей, с которыми имеют дело только триггеры). Ко взгляду я прицепил три Instead-триггера - на удаление, вставку и изменение. После чего обнаружил следующее. При попытке править, удалять или вставлять записи во взгляд через Query Analyzer триггеры отрабатывают - все происходит, как задумано, душа поет. Но стоит попробовать делать эти операции через OLEDB из какой-либо клиентской программы, либо из Enterprise Manager (Open - All rows), который, кстати, работает через ODBC - так же как и Query Analyzer, записи прямиком попадают в базовую таблицу, Instead-триггеры не запускаются, словно их вообще не существует. На конференции на sql.ru мне ответили, что, скорее всего, проблема в сетевых библиотеках. Хотелось бы получить какое-нибудь дальнейшее развитие этой темы.
Еще один глюк. Сделал UDF, которая вызывается в качестве значения Default для поля таблицы. В тексте этой UDF вызывается ниладическая функция SYSTEM_USER. При работе из Query Analyzer SYSTEM_USER возвращает 'sa', а при работе из EM эта же функция возвращает сетевое имя в виде 'Domain_name\User_name', хотя в EM я зарегистрировал сервер тоже под 'sa'. Полагаю, тут тоже подпакостили сетевые библиотеки.
Дальше больше (все что дальше, касается только программистов, использующих Delphi 5 + ADO). Наткнувшись на перечисленные глюки, я деинсталлировал MS SQL Server 2000. При попытке продолжить работу над программами, которые я раньше писал в Delphi+ADO, стала выскакивать ошибка "... BOF or EOF..." при попытке открыть или закрыть любой источник записей, в котором записей не содержится (просто открыть, больше ничего). Переустановка MDAC версий 2.1 и 2.5 не помогла. Оказалось, что MDAC 2.6, который устанавливается вместе с MS SQL Server 2000, БЕССМЕРТЕН. Удалить его уже невозможно. А ошибка возникает из-за несовместимости ADO-компонентов Delphi с этой версией. На сайте Borland выложен патч, который лечит данную ошибку. Я его скачал и установил. "... BOF or EOF..." исчезла. Однако, события ADO-компонентов OnDeleteError, OnPostError и аналогичные перестали нормально работать. Конкретно, если в этих событиях сделано присвоение Action:=daAbort, это не выводило программу в нормальное русло с отменой операции как положено тому быть, программа зацикливалась с постоянной выдачей одного и того же сообщения об ошибке. В результате для того, чтобы вернуться к нормальной работе, мне пришлось переустанавливать на своем компьютере систему - потом уже ставить MDAC более ранней версии.
Возможно, я не нашел каких-то реально существующих менее болезненных путей решения описанных выше проблем. Очень хочется узнать мнение собратьев.
С уважением,
Андрей Гордиенко hydro@corbina.ru
Обсудить вопрос Андрея в форуме
#028<<#029
Хостинг рассылки:
Majordomo.ru - качественный хостинг от $9 в месяц: от 10 Мб,неограниченный трафик, от 10 РОР3, Cgi-bin, MySQL, PHP и секретный сервер, FTP & anonymous FTP, бесплатная регистрация домена,перекодировка кириллицы... http://www.majordomo.ru/hosting и самое главное - уникальное предложение : ДОМЕННОЕ ИМЯ в зоне .ru, .com, .net, .org БЕСПЛАТНО. Побробности http://www.majordomo.ru/hosting/specpr.html
SQL.RU
ФОРУМ

http://subscribe.ru/
E-mail: ask@subscribe.ru |
|
В избранное | ||