![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Процессы и сокеты [Win95/98]
balepa © (2006-03-10 09:13:00)При запросе от клиента на подключение нужно создать новый процесс и в этом процессе подключить этого клиента (Socket).
balepa (2006-03-10 11:02:00) [21]Set AppXL = CreateObject("Excel.application")
ошибка не помню уже какая (а может вообще вылетала программа). Но точно дальше этой строчки п-ра не выполнялась
Сергей М. (2006-03-10 10:54:00) [22]
> В этом коде нет, но я и так пробовал (вставлял в начало
> проц-ы Grafik1)
И что при этом не получилось ?
> почему тогда работает (в другой программе)
Очевидно потому что там переменная XL содержит ссылку на объект Workbook, а не на Application
balepa (2006-03-10 10:51:00) [23]В этом коде нет, но я и так пробовал (вставлял в начало проц-ы Grafik1)
> XL.Worksheets("Данные") - эта строчка не верна, потому что
> у объекта XL нет св-ва Worksheets.
А почему тогда работает (в другой программе) не первый год между прочим так что оно у него есть
Сергей М. (2006-03-10 10:50:00) [24]Кстати, а при чем тут сокеты ?
Что-то не наблюдаю я в коде нити никаких сокетов ...
Сергей М. (2006-03-10 10:45:00) [25]
> Set AppXL = CreateObject("Excel.application") 'вот здесь
> тоже вылазит ошибка
Какая ошибка ? И где эта строчка в коде нити ? Не вижу ...
XL.Workbooks.Open - это функциональный, а не процедурный метод.
При успехе он возвращает объект Workbook, к которому впоследствии и следует обращаться для работы с сего св-вом-коллекцией Worksheets
XL.Worksheets("Данные") - эта строчка не верна, потому что у объекта XL нет св-ва Worksheets.
balepa (2006-03-10 10:41:00) [26]
> 1 способ: Project -> References -> стаим галочку (OLE Automations
> или Microsoft Excel 8.0 object library), вроде
Потом просто обращаешся к workbook.Open FileName и т. д. (как у меня и сделано)
balepa (2006-03-10 10:39:00) [27]1 способ: Project -> References -> стаим галочку (OLE Automations или Microsoft Excel 8.0 object library), вроде
2 способ:
Dim AppXL As Object, XL As Object
Set AppXL = CreateObject("Excel.application") 'вот здесь тоже вылазит ошибка
Set XL = AppXL.Application
XL.Workbooks.Open file
XL.Worksheets("Данные").Range("A1").Value = s
Сергей М. (2006-03-10 10:32:00) [28]А собственно где и как создаются Excel-объекты WorkBook, Sheets и т.д. ?
balepa (2006-03-10 10:25:00) [29]Automation error (Error 440)
When you access Automation objects, specific types of errors can occur. This error has the following cause and solution:
· An error occurred while executing a method or getting or setting a property of an object variable. The error was reported by the application that created the object.
Check the properties of the Err object to determine the source and nature of the error. Also try using the On Error Resume Next statement immediately before the accessing statement, and then check for errors immediately following the accessing statement.
For additional information, select the item in question and press F1.
Сергей М. (2006-03-10 10:23:00) [30]
> Вылазит Ошибка Automation Error
Код ошибки какой ?
p.s. Есть подозрение, что VB-менеджер памяти не потокобезопасен.
balepa (2006-03-10 10:15:00) [31]ReDim avarData1(30000, 1)
ReDim avarData2(30000, 1)
ReDim avarData3(30000, 1)
If U2 = 1 Then i3 = 0: s0 = 0
h = Format(Request(GIndex).RSDate, "dd.mm.yy")
m0: Form1.Label4.Caption = "Обработка " + Format(lll, "000") + " " + Format(h)
mes = Month(h)
Fil = Day(h)
If Request(GIndex).RTip = 0 Then 'если ГП
If Request(GIndex).RArchiv = 1 Then 'если архив
Fil1 = "\\mzal" + Bl + "\Блок" + Bl + " Архив\" + Format(h, "yyyy") + "\" + Format(h, "mm") + "\arxiv" + Bl + "-" + Format(h, "yy-mm-dd") + ".asu"
Fil2 = "D:\Блок" + Bl + " Архив\" + Format(h, "yyyy") + "\" + Format(h, "mm") + "\arxiv" + Bl + "-" + Format(h, "yy-mm-dd") + ".asu"
Else
Fil1 = "\\mzal" + Bl + "\Блок" + Bl + " Gak\" + Format(h, "yyyy") + "\" + Format(h, "mm") + "\gak" + Bl + "-" + Format(h, "yy-mm-dd") + ".asu"
Fil2 = "D:\Блок" + Bl + " Gak\" + Format(h, "yyyy") + "\" + Format(h, "mm") + "\gak" + Bl + "-" + Format(h, "yy-mm-dd") + ".asu"
End If
STEPn = (1200 + 128 + 20 + 16 * 4 + 13) * 2 + 8
AdamTip = 0
PathT = "гп.xls"
hk = 0
Fvr1 = Step0
If Fvr1
balepa (2006-03-10 10:15:00) [32]Public Type TRequest
RSDate As Date
REDate As Date
RSTime As Date
RETime As Date
RParam(0 To 99) As Byte
RCount As Byte
RTip As Byte
RArchiv As Byte
RBlok As Byte
RFrNomer0 As Byte
RFrNomer As Integer
End Type
Public Request(1 To 10) As TRequest
Public Bl As String
Public Metka As Byte 'интервал меток 0-сутки,1-месяц
Public АБК As Byte 'ПРИЗНАК работы по обработки для АБК (0 - mzal, 1 - АБК)
Public fileАБК As String 'запрос...
Dim avarData1() As Date
Dim avarData2() As Variant 'массив значений параметров
Dim avarData3() As Variant
Public NomerVod1 As Long
Public Now2 As Date
Public Dat11 As Date
Public Dat12 As Date
Public BlokN As Byte
Public s1
Public STEPn
Public Fvr As Date
Public Fvr1 As Date
Public Fvr2 As Date
Public FrNomer As Integer 'номер фрагмента (1-100, 101-200,....,801-900)
Public FrNomer0 As Integer
Public Sdvig As Integer
Public ПечатьXLS As String 'файл начальной формы
Public MetkaU As Byte 'метка осчета времени
Public AdamN
Public AdamTip 'если AdamTip = 1 данные с ADAM
Public i2
Dim h As Date
Public NomerVodK
Dim DN(1 To 1380) As Integer 'массив пришедших значений
Dim Kkk1 As Integer
Dim NowFill As Byte 'признак обнавления
'Dim CurUser As String 'имя компьютера
Public count1 As Byte
Public P1(99) As Byte
Public Tip As Byte
Dim Archiv As Byte
Public Const MAX_ACTIVE_SERVERS = 10
'Public GIndex As Byte
Public queues(1 To MAX_ACTIVE_SERVERS) As Byte
Sub Grafik1(GIndex As Byte)
'On Error GoTo khj:
start:
Work = True
Form1.Timer1.Enabled = False
Blok = "Блок" + Format(Request(GIndex).RBlok + 1)
Bl = Request(GIndex).RBlok + 1
k = Request(GIndex).REDate - Request(GIndex).RSDate
Request(GIndex).RArchiv = 1
Dim Step0 As Date
If k < 0.25 Then 'печать 0.25 <6 часов
Step0 = "0:00:01"
ПечатьXLS = "c:\печать\печать0.xls"
Metka = 0
Request(GIndex).RArchiv = 0
GoTo m
End If
Request(GIndex).RSDate = ((Request(GIndex).RSDate * 24 - 0.5) \ 1) / 24 'привязка к часу
If k < 1 Then 'печать 1 от 6 часов до 23-59-59
Step0 = "0:00:10"
ПечатьXLS = "c:\печать\печать1.xls"
Metka = 0
Request(GIndex).RArchiv = 0
ElseIf k < 2 Then 'печать 2 с 24 ч до 48 ч 59 м 58 сек
Step0 = "0:00:20"
ПечатьXLS = "c:\печать\печать2.xls"
Metka = 0
Request(GIndex).RArchiv = 0
ElseIf k < 4 Then 'печать 4
Step0 = "0:00:30"
ПечатьXLS = "c:\печать\печать4.xls"
Metka = 0
Request(GIndex).RArchiv = 0
ElseIf k < 15 Then 'печать 15
Step0 = "0:02:00"
ПечатьXLS = "c:\печать\печать15.xls"
Metka = 0
ElseIf k < 30 Then 'печать 30
Step0 = "0:05:00"
ПечатьXLS = "c:\печать\печать30.xls"
Metka = 0
ElseIf k < 60 Then 'печать 60
Step0 = "0:10:00"
ПечатьXLS = "c:\печать\печать60.xls"
Metka = 0
ElseIf k < 180 Then 'печать 180
Step0 = "0:30:00"
ПечатьXLS = "c:\печать\печать180.xls"
Metka = 1
ElseIf k < 360 Then 'печать 360
Step0 = "1:00:00"
ПечатьXLS = "c:\печать\печать360.xls"
Metka = 1
ElseIf k < 720 Then 'печать 720
Step0 = "2:00:00"
ПечатьXLS = "c:\печать\печать720.xls"
Metka = 1
Else 'печать 1000
Step0 = "4:00:00"
ПечатьXLS = "c:\печать\печать1000.xls"
Metka = 1
End If
d00 = Request(GIndex).RSDate * 60 * 60 * 24
s00 = Step0 * 60 * 60 * 24
d1 = (((d00 / s00) - 0.5) \ 1) * s00
Request(GIndex).RSDate = d1 / 60 / 60 / 24 '23:59:59 -> 23:59:50 Step0 = 00:00:10
d00 = Request(GIndex).REDate * 60 * 60 * 24
s00 = Step0 * 60 * 60 * 24
d1 = (((d00 / s00) - 0.5) \ 1) * s00
Request(GIndex).REDate = d1 / 60 / 60 / 24 '23:59:59 -> 23:59:50 Step0 = 00:00:10
m: i3 = 0
dat1 = Format(Request(GIndex).RSDate, "dd-mmm-yyyy hh-mm")
dat2 = Format(Request(GIndex).REDate, "dd-mmm-yyyy hh-mm")
Form1.Label4.Caption = ""
For j = 0 To Request(GIndex).RCount - 1 'цикл по отмеченым СНП
If Request(GIndex).RParam(j) <> 0 Then
lll = Request(GIndex).RParam(j) + Request(GIndex).RFrNomer
If lll > 1478 Then
lll = lll - 278
End If
s1 = PNP_GP(Request(GIndex).RBlok, lll)
If s1 = 0 Then GoTo m1
If Metka = 0 Then
MetkaU = Day(Request(GIndex).RSDate)
Else
MetkaU = Month(Request(GIndex).RSDate)
End If
Сергей М. (2006-03-10 10:10:00) [33]
> В смысле реализацию?
Пардон ...
Реализацию ф-ции Grafik1() покажи ..
balepa (2006-03-10 10:07:00) [34]Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
(VB 5.0)
В смысле реализацию?
Сергей М. (2006-03-10 10:05:00) [35]Стек потока слишком мал.
Поставь 0.
Покажи свою декларацию и реализацию ф-ции CreateThread().
balepa (2006-03-10 10:02:00) [36]Создаю так:
ThreadHandle = CreateThread(mNull, 2000, AddressOf Grafik1, GIndex, CREATE_SUSPENDED, Thread_ID)
SetThreadPriority ThreadHandle, THREAD_PRIORITY_LOWEST
ResumeThread ThreadHandle
На строке (в процедуре Grafik1) Workbook.Open FileName.Вылазит Ошибка Automation Error. Может поток не правильно создаю (в этом не сомневаюсь)? Подскажи как правильно или где почитать
Сергей М. (2006-03-10 09:57:00) [37]Что значит "не получилось" ?
balepa (2006-03-10 09:52:00) [38]В VB не получилось в потоке Открыть Excelе'вский документ
Сергей М. (2006-03-10 09:42:00) [39]
> balepa (10.03.06 09:37) [2]
> Можно сказать не процесс,а другую программу
Другая программа и есть другой процесс.
> в которой надо осуществить подключение этого клиента
А чем тогда даннаяпрограмма занимается, если не подключением ?
> С потоками не получилось. Программа на VB
Программа на VB тоже может быть многопоточной, ничто этому не мешает.
balepa (2006-03-10 09:37:00) [40]
> Сергей М. © (10.03.06 09:31) [1]
> Может быть все-таки не процесс а нить (thread) ?
> Это же разные по сути объекты ..
Можно сказать не процесс,а другую программу, в которой надо осуществить подключение этого клиента.
С потоками не получилось. Программа на VB. Примеры можно дать хоть на чем. Или подскажите в какую сторону копать?