- Код: Выделить всё
Private Sub SendJobs(ByVal Request As String, ByVal DataType As Integer, ByVal sckIndex As Integer)
Dim Rs As ADODB.Recordset
Dim SQL As String
Dim i As Integer
Dim CurrentAbonent As UserInfo
Set Rs = New ADODB.Recordset
Select Case DataType
Case 0
If Request = "" Then
SQL = "Select * from PhoneBase"
Else
SQL = "Select * from PhoneBase WHERE Address LIKE '%" & Request & "%' or Podrazdelenie LIKE '%" & Request & "%' or Slujba LIKE '%" & Request & "%' or Otdel LIKE '%" & Request & "%' or Sector LIKE '%" & Request & "%' or Doljnost LIKE '%" & Request & "%' or Abonent LIKE '%" & Request & "%' or SLO LIKE '%" & Request & "%' or GorTel LIKE '%" & Request & "%' or Vnutrenni LIKE '%" & Request & "%'"
End If
Case 1: SQL = "Select * from PhoneBase WHERE Address LIKE '%" & Request & "%'"
Case 2: SQL = "Select * from PhoneBase WHERE Podrazdelenie LIKE '%" & Request & "%'"
Case 3: SQL = "Select * from PhoneBase WHERE Slujba LIKE '%" & Request & "%'"
Case 4: SQL = "Select * from PhoneBase WHERE Otdel LIKE '%" & Request & "%'"
Case 5: SQL = "Select * from PhoneBase WHERE Sector LIKE '%" & Request & "%'"
Case 6: SQL = "Select * from PhoneBase WHERE Doljnost LIKE '%" & Request & "%'"
Case 7: SQL = "Select * from PhoneBase WHERE Abonent LIKE '%" & Request & "%'"
Case 8: SQL = "Select * from PhoneBase WHERE SLO LIKE '%" & Request & "%'"
Case 9: SQL = "Select * from PhoneBase WHERE GorTel LIKE '%" & Request & "%'"
Case 10: SQL = "Select * from PhoneBase WHERE Vnutrenni LIKE '%" & Request & "%'"
End Select
Rs.Open SQL, CN, adOpenKeyset, adLockReadOnly
sckServer(sckIndex).SendData "Items|" & Rs.RecordCount
DoEvents
For i = 1 To Rs.RecordCount
With CurrentAbonent
.Address = Rs!Address & DataSep
.Podrazdelenie = Rs!Podrazdelenie & DataSep
.Slujba = Rs!Slujba & DataSep
.Otdel = Rs!Otdel & DataSep
.Sector = Rs!Sector & DataSep
.Doljnost = Rs!Doljnost & DataSep
.Abonent = Rs!Abonent & DataSep
.SLO = Rs!SLO & DataSep
.GorTel = Rs!GorTel & DataSep
.Vnutrenni = Rs!Vnutrenni
sckServer(sckIndex).SendData "Joblst" & .Address & .Podrazdelenie & .Slujba & .Otdel & .Sector & .Doljnost & .Abonent & .SLO & .GorTel & .Vnutrenni
DoEvents
Rs.MoveNext
End With
Next i
Rs.Close
Set Rs = Nothing
End Sub
Строка : sckServer(sckIndex).SendData "Joblst" & .Address & .Podrazdelenie & .Slujba & .Otdel & .Sector & .Doljnost & .Abonent & .SLO & .GorTel & .Vnutrenni
отсылает готовую строку клиенту. sckServer(sckIndex) - массив соккетов.
Из кода видно, что посылка сообщений производится для каждой строки рекордсета, НО !!! Сообщения слепляются и отправляются все разом нарушая структуру строки и клиентское приложение не правильно бъёт строки функцией Split
Вот пример получаемых клиентом данных:
JoblstËàâðóøèíñêèé ïåðåóëîê|Äèñïåò÷åðñêèå|Äèñïåò÷åðñêàÿ èíæåíåðíîãî êîðïóñà|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|120|953-54-86; 957-07-10|710JoblstËàâðóøèíñêèé ïåðåóëîê|Äèñïåò÷åðñêèå|Äèñïåò÷åðñêàÿ ïîæàðîòóøåíèÿ|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|118|ÍÅ ÇÀÄÀÍÎ|ÍÅÒJoblstËàâðóøèíñêèé ïåðåóëîê|Äèñïåò÷åðñêèå|Äèñïåò÷åðñêàÿ àâòîìàòèêè êëèìàòà, ðàäèîïîèñêà|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|123|957-07-07|707JoblstËàâðóøèíñêèé ïåðåóëîê|Äèñïåò÷åðñêèå|Äèñïåò÷åðñêàÿ äåïîçèòàðèÿ|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|ÍÅ ÇÀÄÀÍÎ|410|957-07-90|790
(за шрифт sorry, чё то он не становится нормальным)
DataSep - это переменная, хранящая делимитер '|'
Фишка в чём: каждое сообщение начинается с 'Joblst' и если присмотреться к возвращённому значению, то видно, что 'Joblst' присутствует и в других местах строки, хотя соккет должен был отправлять каждую строку отдельным потоком. Функфия DoEvents иногда спасает (сам не понимаю, почему)
ПОЧЕМУ СКЛЕИВАЮТСЯ СООБЩЕНИЯ?????