Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Запущено слишком много задач-клиентов

Ответить
Настройки темы
VBS/WSH/JS - Запущено слишком много задач-клиентов

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: xilit
Дата: 08-04-2011
Вложения
Тип файла: rar VBS.rar
(22.9 Kb, 6 просмотров)
Добрый день.
В этой теме http://forum.oszone.net/thread-203670.html megaloman подсказал мне как в базе *.DBF по необходимым параметрам определить количество строк.
Я немного переделал код под свою ситуацию.
Вот что получилось:
Код: Выделить весь код
Path = "h:\Работа\Документы\VBS\" 
REESTRO = "REESTRO.DBF"

Connect = "Driver={Microsoft dBase Driver (*.dbf)};DefaultDir=" + Path ' Подключение к базе *.DBF
	Set fso = CreateObject("Scripting.FileSystemObject")
	Set file = fso.OpenTextFile("C:\Взрослые.txt", 8, true) 'Создает файл и записывает в него отфильтрованную информацию
	Set RecSet1 = WScript.CreateObject("ADODB.Recordset") 	'ID по которому будут сопоставляться данные
	Set RecSet2 = WScript.CreateObject("ADODB.Recordset")
	Set RecSet3 = WScript.CreateObject("ADODB.Recordset")
        Set RecSet101 = WScript.CreateObject("ADODB.Recordset") 
	Set RecSet102 = WScript.CreateObject("ADODB.Recordset")
	Set RecSet103 = WScript.CreateObject("ADODB.Recordset")
        
SQL = "Select COUNT(*) AS VrachChild From " +REESTRO+ " Where KATEG=3 and CODVR='0480004'" 'Параметры поиска для каждого врача отдельно
	RecSet1.Open SQL , Connect
	SQL = "Select COUNT(*) AS VrachChild From " +REESTRO+ " Where KATEG=1 and CODVR='0480004'" 'Параметры поиска для каждого врача отдельно
	RecSet101.Open SQL , Connect
	file.Write("Врач 		| Акушер-гинеколог = ")	'Задает имя строки для записи
	file.WriteLine(RecSet1.Fields("VrachChild")) + (RecSet101.Fields("VrachChild"))	'Записывает пересчитанные данные на против соответствующего врача и переводит каретку
	RecSet1.Close()
	RecSet101.Close()
	
	SQL = "Select COUNT(*) AS VrachChild From " +REESTRO+ " Where KATEG=3 and CODVR='0380004'"
	RecSet2.Open SQL , Connect
	SQL = "Select COUNT(*) AS VrachChild From " +REESTRO+ " Where KATEG=1 and CODVR='0380004'"
	RecSet102.Open SQL , Connect
	file.Write("Врач 		| Онколог = ")
	file.WriteLine(RecSet2.Fields("VrachChild")) + (RecSet102.Fields("VrachChild"))
	RecSet2.Close()
	RecSet102.Close()
	
	SQL = "Select COUNT(*) AS VrachChild From " +REESTRO+ " Where KATEG=3 and CODVR='0040039'"
	RecSet3.Open SQL , Connect
	SQL = "Select COUNT(*) AS VrachChild From " +REESTRO+ " Where KATEG=1 and CODVR='0040039'"
	RecSet103.Open SQL , Connect
	file.Write("Врач		| Участковый терапевт = ")
	file.WriteLine(RecSet3.Fields("VrachChild")) + (RecSet103.Fields("VrachChild"))
	RecSet3.Close()
	RecSet103.Close()
Так вот таких врачей у меня 70 человек.
После того как их всех забил в скрипт, во время выполнения выходит ошибка:
[Microsoft][Драйвер ODBC dBase] Запущено слишком много задач-клиентов.
Я думал что добавление RecSet*.Close() исправит задачу, но нет. Не получилось.
Подскажите пожалуйста где я ошибся.


Исходники и образец таблицы в приложенном архиве.

Отправлено: 15:08, 08-04-2011

 

Ветеран


Contributor


Сообщения: 2710
Благодарности: 1686

Профиль | Отправить PM | Цитировать


Не очень понял Вашу логику, вот попробуйте вариант, но на Ваших данных всё равно нулю, так как указанных значений CODVR в Вашей базе нет
Открывал ваш ДБФ Экселом, брал существующие значения - нечто выбирает. Извините, пути подставил свои.
Код: Выделить весь код
Path = "D:\Delete\"
REESTRO = "REESTRO.DBF"

Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("D:\Delete\Взрослые.txt", 8, True)         'Создает файл и записывает в него отфильтрованную информацию
Connect = "Driver={Microsoft dBase Driver (*.dbf)};DefaultDir=" + Path  ' Подключение к базе *.DBF

Set RecSet = CreateObject("ADODB.Recordset")                    'ID по которому будут сопоставляться данные
        
Sql = "Select COUNT(*) AS VrachChild From " + REESTRO + " Where CODVR='0480004' and (KATEG=3 or KATEG=1)"   'Параметры поиска для каждого врача отдельно
RecSet.Open Sql, Connect
    file.WriteLine "Врач        | Акушер-гинеколог = " + CStr(RecSet.Fields("VrachChild"))    'Задает имя строки для записи
RecSet.Close

Sql = "Select COUNT(*) AS VrachChild From " + REESTRO + " Where CODVR='0380004' and (KATEG=3 or KATEG=1)"   'Параметры поиска для каждого врача отдельно
RecSet.Open Sql, Connect
    file.WriteLine "Врач        | Онколог = " + CStr(RecSet.Fields("VrachChild"))     'Задает имя строки для записи
RecSet.Close

Sql = "Select COUNT(*) AS VrachChild From " + REESTRO + " Where CODVR='0040039' and (KATEG=3 or KATEG=1)"   'Параметры поиска для каждого врача отдельно
RecSet.Open Sql, Connect
    file.WriteLine "Врач        | Участковый терапевт = " + CStr(RecSet.Fields("VrachChild"))     'Задает имя строки для записи
RecSet.Close
    
file.Close
Посмотрел на Ваш скрипт в прикреплённом файле. По видимому, более читаемо сделать вот так:
Код: Выделить весь код
Path = "D:\Delete\"
REESTRO = "REESTRO.DBF"

N = 3
ReDim mCode(N), mName(N)
i = 0
i = i + 1
mCode(i) = "'0480004'"
mName(i) = " Акушер-гинеколог = "
i = i + 1
mCode(i) = "'0380004'"
mName(i) = " Онколог = "
i = i + 1
mCode(i) = "'0040039'"
mName(i) = " Участковый терапевт = "

Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("D:\Delete\Взрослые.txt", 8, True)         'Создает файл и записывает в него отфильтрованную информацию
Connect = "Driver={Microsoft dBase Driver (*.dbf)};DefaultDir=" + Path  ' Подключение к базе *.DBF

Set RecSet = CreateObject("ADODB.Recordset")                    'ID по которому будут сопоставляться данные
        
For i = 1 To N
    Sql = "Select COUNT(*) AS VrachChild From " + REESTRO + " Where CODVR=" + mCode(i) + " and (KATEG=3 or KATEG=1)" 'Параметры поиска для каждого врача отдельно
    RecSet.Open Sql, Connect
        file.WriteLine mName(i) + CStr(RecSet.Fields("VrachChild"))    'Задает имя строки для записи
    RecSet.Close
Next
        
file.Close
Не знаю, зачем Вам это нужно, но ИМХО лучше эту задачу решить в Excel.
В клетках, например, столбцах А и B забить соответствие Код-Врач, макросом прочитать последовательно эти значения и в столбце C выдаватьть ответы

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 09-04-2011 в 11:11.


Отправлено: 20:37, 08-04-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2710
Благодарности: 1686

Профиль | Отправить PM | Цитировать


Вот еще вариант
Код: Выделить весь код
Public file, Connect, RecSet, REESTRO

Path = "D:\Delete\"
REESTRO = "REESTRO.DBF"

Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile("D:\Delete\Взрослые.txt", 8, True)         'Создает файл и записывает в него отфильтрованную информацию

Connect = "Driver={Microsoft dBase Driver (*.dbf)};DefaultDir=" + Path
Set RecSet = CreateObject("ADODB.Recordset")

dbfSelect "'0480004'", " Акушер-гинеколог = "
dbfSelect "'0380004'", " Онколог = "
dbfSelect "'0040039'", " Участковый терапевт = "
        
file.Close

Sub dbfSelect(mCode, mName)
    
    Sql = "Select COUNT(*) AS VrachChild From " + REESTRO + " Where CODVR=" + mCode + " and (KATEG=3 or KATEG=1)" 'Параметры поиска для каждого врача отдельно
    RecSet.Open Sql, Connect
        file.WriteLine mName + CStr(RecSet.Fields("VrachChild"))    'Задает имя строки для записи
    RecSet.Close

End Sub

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 11:11, 09-04-2011 | #3


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо за совет.
А по поводу exel, то он отпадает потому, что собирать эту информацию буду не я, а операторы ЭВМ и желательно что бы на это дело у них уходило минимум действий)

Отправлено: 20:54, 10-04-2011 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Запущено слишком много задач-клиентов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Кушает слишком много оперативной памяти VbInt Microsoft Windows NT/2000/2003 7 07-10-2012 15:10
Event Viewer - ветка Security - слишком много записей dodger Microsoft Windows NT/2000/2003 9 17-12-2009 14:16
Шесть редакций Windows 7: по-прежнему слишком много OSZone News Новости и события Microsoft 5 05-02-2009 07:06
Прочее - Слишком много сетевых запросов. voler Защита компьютерных систем 10 19-10-2007 11:20
Слишком много устройств... psyone Непонятные проблемы с Железом 16 13-08-2004 20:32




 
Переход