Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Процессы и сокеты [Win95/98]


Страницы:   1 2 3

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. Примеры можно дать хоть на чем. Или подскажите в какую сторону копать?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо