Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Max длина строки для клиента / 22 сообщений из 22, страница 1 из 1
24.08.2006, 11:28
    #33939543
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Господа здравствуйте !!!

Вопрос из МСМ-ма, (Activate COM) но я думаю что многие этим занимались раньше...

Код на М:
Код: plaintext
1.
2.
3.
4.
Larg(Var) ;;Generated by GVS  [ 24 -Aug- 06  /  09 : 44  AM]
        K Var
        N i
        F i= 1 : 1 : 10000  set Var(i)="It is the test for the large line which includes of 10 000 lines  Nr.-> "_i_"|"
        q

Код на Чистом VB- Работает !!! :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub Command1_Click()
Dim Var As String
For i =  1  To  10000 
Var = Var & "It is the test for the large line which includes of 10 000 lines " & i & "|"
Next i
Varfull = Split(Var, "|")
Rec = UBound(Varfull)
For cnt =  0  To Rec
ret1 = Varfull(cnt)
List1.AddItem ret1
Next cnt
frmGlb.MousePointer = vbDefault
End Sub

Код с использованием m.command - вылетает :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Command1_Click()
Dim Var As String
On Error GoTo Error
nod = m.Do("Larg^Larg", Var)
Varfull = Split(Var, "|")
Rec = UBound(Varfull)
For cnt =  0  To Rec
ret1 = Varfull(cnt)
List1.AddItem ret1
Next cnt
frmGlb.MousePointer = vbDefault
Exit Sub
Error:
frmGlb.MousePointer = vbDefault
MsgBox ("Error: " & err.Description)

End Sub



Почему-то большая строка не возвращается клиенту и видимо
ошибка в обьекте m.command в методе m.Do("Larg^Larg",Var)
хотя в доке чуть не 4 Гб !!!

Прошу откликаться по этому поводу

Спасибо.
...
Рейтинг: 0 / 0
24.08.2006, 11:59
    #33939677
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
как всегда вопрос для телепатов.
хорошо бы код Larg^Larg показать...
если не ошибаюсь, то в MSM строка ограничена 4000 символов.
...
Рейтинг: 0 / 0
24.08.2006, 14:04
    #33940234
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
А почему это не код ???
Я его на первом месте в сообщении и поставил ...

Код: plaintext
1.
2.
3.
4.
Larg(Var) ;;Generated by GVS  [ 24 -Aug- 06  /  09 : 44  AM]
        K Var
        N i
        F i= 1 : 1 : 10000  set Var(i)="It is the test for the large line which includes of 10 000 lines  Nr.-> "_i_"|"
        q
...
Рейтинг: 0 / 0
24.08.2006, 16:39
    #33940908
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
звиняюсь не заметил.
а ошибка какая или без ошибки вылетает?
на сколько я помню, могу ошибаться, массив передается все равно строкой
те ограничение на 4000 (или сколько там...) остается.
а если в М сделать F i=1:1:2?
...
Рейтинг: 0 / 0
24.08.2006, 17:01
    #33940985
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Цикл поменьше без проблемммммм !!!

Меня вводит в заблуждение вот это:
автор Strings of any size up to a limit of 16 MB on the 32-bit version and 64K on the 16-bit version can be passed between the server and the client.
· Parameters on a Do method call can be passed by reference as well as by value. This makes it easier to return multiple items of data. This version allows any of the parameters to a Do method call to be passed by reference. If the parameters are modified by the M code, the new value is automatically returned to the calling program. These parameters can be any size up to 16 MB/64K.

· Arrays can be sent as parameters to Do method calls. Both by-reference and by-value arrays are supported, which simplifies the process of sending or receiving a large amount of structured data in one call.


Extract from MSMA8COM.HLP, documentation for MSM-Activate 4.4.0, copyright © 1998 Micronetics Design Corporation

А вот каким макаром их передать не понимаю

Что странно и внутри МСМ-а все нормально - 10 000 строк в буфер я вижу
В Бэйсике однозначно тоже никаких нюансов , а вот вместе никак

Ошибка VB log file огромный: (кусочек)

Application exception occurred:
App: VB6.exe (pid=784)
When: 23.08.2006 @ 15:23:40.421
Exception number: c0000005 (access violation)


Может VB корявый ...
...
Рейтинг: 0 / 0
24.08.2006, 18:38
    #33941240
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
сейчас попробовал, в MSM win макс. строка=32764.
видимо - это предел.
просто, давно, когда копался во внутренностях MSMAPI
там кажись именно в строку все записывалось (могу ошибаться,
давно это было).
Еще, вроде, какие-то глобалы создавались в случае ошибок MSMAPI
в разделе SYS
...
Рейтинг: 0 / 0
25.08.2006, 09:05
    #33941979
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Вроде вспомнил, 4096 это ограничение для Xecute.
Для Do без ограничений.
У вас, наверное, нехватает памяти для раздела.
Попробуйте увеличить либо дефолтные настройки
(SYSGEN -> Default partition size) либо прямо в программе.
...
Рейтинг: 0 / 0
25.08.2006, 09:40
    #33942044
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Все правильно Вы говорите, для Do без ограничений !!!
Вот что у меня стоит при соединение с сервером:

Код: plaintext
1.
m.Partsize =  16384 
m.Login
т.е. m.Partsize вполне хватает !!!

Когда явно не хватает памяти выскакивает ошибка <PGMOV> здесь понятно.
По этому я и не понимаю где ошибка...

Конечно проблема решима, можно получать в цикле по одной строке,
типа:

Код: plaintext
1.
2.
For i= 1  to ....
m.Do(.....)
next i
но когда по модему с удаленных серверов, это уже получается медлено
и здесь явно просится масив строк или длинная строка ...
Сегодня еще проекспериментирую с VisM - посмотрю как с этим справится
Cache'
...
Рейтинг: 0 / 0
25.08.2006, 12:08
    #33942559
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
А вот тесты с использованием VisM (ActiveX) для Cache':

Cкромнее чем у MSM ???

Код на COS:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Larg(P0) ;PLIST - Var
	kill PLIST
            for PLIST= 1 : 1 :P0 Do
           .Set PLIST(PLIST)=PLIST_"It is the test for the large line which includes of  lines  Nr.-> "_PLIST
        q  1 
Larg1(P0) ; P0 -Var
	    for i= 1 : 1 :P0 Do
        .Set P1=P1_"|"_"It is the test for the large line which includes of  lines  Nr.-> "_i
        q P1       


Код на VB:


Код: 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.
Private Sub Command1_Click()
Dim cnt As Integer
Dim RET As String, RET1 As String
Dim PLIST As String
List1.clear
VisM1.P0 = val(txtP0.Text)
VisM1.Code = "$$Larg^Lr(P0)"
VisM1.ExecFlag =  1 
RET = VisM1.PLIST
MsgBox Len(RET)
Varfull = Split(RET, vbCrLf)
Rec = UBound(Varfull)
For cnt =  0  To Rec
RET1 = Varfull(cnt)
List1.AddItem RET1
Next cnt
End Sub

Private Sub Command2_Click()
Dim cnt As Integer
Dim RET As String, RET1 As String
Dim PLIST As String
List1.clear
VisM1.P0 = val(txtP0.Text)
VisM1.Code = "$$Larg1^Lr(P0)"
VisM1.ExecFlag =  1 
RET = VisM1.VALUE
MsgBox Len(RET)
Varfull = Split(RET, "|")
Rec = UBound(Varfull)
For cnt =  0  To Rec
RET1 = Varfull(cnt)
List1.AddItem RET1
Next cnt
End Sub


Длина возвращаемой строки для стандартной переменной PLIST (свойстваVisM ) примерно = 32000 символов

Длина возвращаемой строки для стандартной переменной P1 (свойства VisM ) примерно = 16000 символов


Может еще я не прав , ведь это я на скорую руку - посмотрим.
...
Рейтинг: 0 / 0
25.08.2006, 13:02
    #33942788
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
авторсейчас попробовал, в MSM win макс. строка=32764.
видимо - это предел.

В MSM-е, примерно строка из 254000 символов ...
Я их получаю реально в Win
...
Рейтинг: 0 / 0
25.08.2006, 13:10
    #33942812
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
32к - это если в МСМ делать
S a=""
f i=1:1:100000 s a=a_"1"
то вылетит <MXSTR>
провел я у себя тест с первым Larg
Файл test.vbs
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
'Test MSM-Activate
Dim obj
Dim Var( 10000 )
Dim nod
Set obj=CreateObject("M.Command")
obj.Partsize= 16384 
obj.Server="10.1.2.6"
obj.Port= 1666 
obj.Login
nod = obj.Do("Larg^Larg", Var)
obj.Logout
MsgBox Var( 10000 )
сработало
...
Рейтинг: 0 / 0
25.08.2006, 13:33
    #33942897
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Вы совершенно правы !!!
Но , по моему возвращается только то значение что и указывается в Var(...)

т.е. Var(1) - первое и т.д. Var(10000) - а вместе нет...
Черт, это становится интерестно нужно копаться !!!
...
Рейтинг: 0 / 0
25.08.2006, 13:44
    #33942936
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Ну да, это и есть !!!

Код: plaintext
1.
2.
3.
nod = m.Do("Larg^Larg", Var)
For i =  1  To  10000 
VSGed.AddItem Var(i)
Next i
...
Рейтинг: 0 / 0
25.08.2006, 13:47
    #33942952
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Я к тому, что у меня работет.
Правда в VBS
...
Рейтинг: 0 / 0
25.08.2006, 13:50
    #33942967
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
ValeriuВы совершенно правы !!!
Но , по моему возвращается только то значение что и указывается в Var(...)

т.е. Var(1) - первое и т.д. Var(10000) - а вместе нет...
Черт, это становится интерестно нужно копаться !!!
что-то я несовсем понял на счет вместе?
из МСМ возвращается массив из 10000 значений.
в ВБ они нормально видны...
...
Рейтинг: 0 / 0
25.08.2006, 14:10
    #33943058
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Правильно, все на месте, масив принимается целиком
Сейчас пробовал вернуть то, что у меня не работало - работает !!!
Еще разобраться как вычислить Var(???) из MSM и вообще будет все O'Key ...

Большое спасибо !!!
...
Рейтинг: 0 / 0
25.08.2006, 16:07
    #33943631
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Просится редименсионировать масив

Код: plaintext
1.
2.
3.
4.
Dim Var() As Variant
 nod = m.Do("SplGn^%gvED", txtName.Text)
 dmn = m.Xecute("w dmn")
 ReDim Retn(dmn)
 nod = m.Do("SplGn^%gvED", txtName.Text, Var)
..........

Но приходится 2 раза вызвать прогу на М, что конечно неприятно, иначе
опять ошибка ....
...
Рейтинг: 0 / 0
25.08.2006, 17:43
    #33943984
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
ValeriuЕще разобраться как вычислить Var(???) из MSM и вообще будет все O'Key ...
а что там вычислять?

ValeriuПросится редименсионировать масив
Но приходится 2 раза вызвать прогу на М, что конечно неприятно, иначе
опять ошибка ....
Как вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
'Test MSM-Activate
Dim obj
Dim Var()
Dim nod
Set obj=CreateObject("M.Command")
obj.Partsize=16384
obj.Server="10.1.2.6"
obj.Port=1666
obj.Login
ReDim Var(100) ' тут максимум
nod = obj.Do("Larg^Larg", Var)  ' nod - возвращаем из МСМ кол-во
obj.Logout
ReDim preserve Var(nod)
For i= 0  to UBound(Var) 
 MsgBox i & " - " & Var(i)
Next
...
Рейтинг: 0 / 0
28.08.2006, 12:41
    #33946502
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Если еще не надоел
Что-то не хочет рулить, только 100 первых строк масива
Пробовал разные варианты но только то что в ReDim Retn(...)
Размер получаю, хотя для больших масивов (примерно 200 000 записей)
глухо совсем ...



Код На М:

Код: plaintext
1.
2.
3.
4.
5.
6.
SplGn(vr,Retn) 
        Kill Retn
        Set Retn=""
        For dm= 1 : 1  s ret=$Q(@vr) q:ret=""  Do
        . Set Retn(dm)=ret_"="_"|"_@ret
        . s vr=ret
EnGn    Quit dm

Код на VBScript:

Код: 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.
<HTML>
<HEAD><TITLE>It Simple MSM Example by Large 

String</TITLE>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Button1_OnClick

Dim m
Dim Retn()
Dim dm
Dim A
Set m=CreateObject("m.Command")
m.Server="192.168.1.1"
m.Port= 1666 
m.Type="TCPIP"
m.UCI="PEN"
m.Volgrp="DPZ"
m.Partsize= 16384 
m.Login
ReDim Retn( 100 )
dm = m.Do("SplGn^%gvED", "^BOT", Retn)
m.Logout
MsgBox dm  
ReDim Preserve Retn(dm)
For i= 0  to dm
Document.Write Retn(i) 
Next
End Sub

-->
</SCRIPT>
</HEAD>
<BODY>
<H3>It Simple MSM Example by Large String </H3><HR>
<FORM><INPUT NAME="Button1" TYPE="BUTTON" VALUE="Click Here"></FORM>
</BODY>
</HTML>
...
Рейтинг: 0 / 0
28.08.2006, 14:10
    #33946827
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Два замечания:
1.
Код: plaintext
1.
2.
3.
4.
' тут нужно ставить максимум!!! если может быть 300.000,
' то Retn( 300000 )
ReDim Retn( 300000 )  
dm = m.Do("SplGn^%gvED", "^BOT", Retn)
2. неуверен, но в M функции лучше dm=0:1
что бы массив как и в VB начинался с 0
...
Рейтинг: 0 / 0
28.08.2006, 15:03
    #33947040
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
Спасибо.
Больше ReDim Retn(65534) никак не могу поднять
- виснет прога, наверное есть смысл загружать порциями...
...
Рейтинг: 0 / 0
28.08.2006, 18:29
    #33947823
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Max длина строки для клиента
похоже что 65534 действительно какой-то предел...
причем похоже где-то в msm-active.
надежнее конечно загружать порциями, а
можно и свой сервер TCP набросать в msm
для таких целей
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Max длина строки для клиента / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]