Страница 1 из 2
Помогите плиз разрешить один затык.
Добавлено: 12 июл 2006, 16:32
george
Есть аппликация в VB. Она выплевывает данные из базы данных в Word файл. Данные выбираются по Скюль запросу (типа .OpenDataSource(Name:="",bla-bla-bla,Query="select * from ... etc"), наизусть не помню, код на работе.
Да все бы и хорошо, но когда длина поля превышает определенную длину, подозреваю что 256, то остаток строки просто обгрызается. Проверил в базе - все ОК, да и длина там 600. Грешил на VB программера, думал что он где-то длину поля усек, раздобыл его исходники - нет. Где собака порылась-то? ODBC что ли безобразничает? И как забороть-то?
Спасибы.
Добавлено: 12 июл 2006, 20:17
Ranger
код надо смотреть...
Добавлено: 12 июл 2006, 20:33
vg
код в студию.
ПС. А почему не ADO используете?
Добавлено: 12 июл 2006, 20:35
Проф. Преображенский
А чем смотришь? Wordом? Может Ворд как-то строку режет или не показывает? Посмотри чем-нибудь другим.
Добавлено: 13 июл 2006, 06:09
george
Dim oApp As New Word.Application
Dim oMainDoc As Word.Document
Dim oSel As Word.Selection
'Start a new main document for the mail merge
oMainDoc = oApp.Documents.Open(FileName:="C:\Folder\WordFile.doc", ReadOnly:=True)
With oMainDoc.MailMerge
.MainDocumentType = Word.WdMailMergeMainDocType.wdFormLetters
'Set up the mail merge data source
.OpenDataSource(Name:="", Connection:="DSN=MailMerge;UID=XXX;PWD=12345", SQLStatement:="SELECT * FROM Table")
Dim str As String = ""
Dim rng As Word.Range = oMainDoc.Range(Start:=1, End:=1)
'Add the field codes to the document to create the form letter
With .Fields
oSel = oApp.Selection 'Reduces interface requests
'******** Text Field ************************************
rng = oMainDoc.Range(Start:=45, End:=45)
rng.Select()
.Add(oSel.Range, "TEXT") 'Long text
End With
End With
Dim ret
'Perform the mail merge to a new document
With oMainDoc
.MailMerge.Destination = Word.WdMailMergeDestination.wdSendToNewDocument
.MailMerge.DataSource.ActiveRecord = Word.WdMailMergeActiveRecord.wdLastRecord
ret = MsgBox(.MailMerge.DataSource.ActiveRecord & " records will be " & _
"merged. Click Yes to continue or No to quit.", _
vbYesNo + MsgBoxStyle.SystemModal)
If ret = vbYes Then
.MailMerge.Execute(Pause:=False)
Else
End With
Any idea?
Thanks!
Добавлено: 13 июл 2006, 06:23
george
294 characters is OK, 295 fails... I mean it outputs up to 294 characters, the rest of the string gets truncated, mlja.
Добавлено: 13 июл 2006, 06:42
dima
Используя DSN MailMerge подсоединись к той-же самой базе данных через например WinSql и сделай запрос. Проверь что данные из текстового поля для записи которую VB "обрезает" пришли целиком.
Если да, то настройка DSN и ODBC драйвер непричем.
Проверь, что данные из текстового поля не содержат посередине признака конца, чтоб VB со своими bstr просто не обрубил строку.
Из VB сбрось в обычный текстовый файл, чтоб проверить, что данные не содержат какого-то символа, который трактуется Word-ом как управляющий.
Добавлено: 13 июл 2006, 08:03
george
I checked it with DbVisualizer, it works... So the culprit is Word most likely... Suxx!
Thanks, I will be digging further.
Добавлено: 14 июл 2006, 18:16
george
To whom it may concern.
Если может кому понадобится. Во-первЫх строках MS Word suxx. Поля типа String длиной более 255 не глотает. (я ошибался, когда сказал 294. Пересчет дал 255).
НИГДЕ, - ни в MSDN, ни в хугле, ни в help-е по . Net - никаких объяснений по ограничениям нету. По касательной зацепил, что длинные поля должны быть описаны как memo или note, что ли.
В случае с моей датабазой 1 Мегабайт я не обязан описывать даже.
Короче, пришлось все немного поломать. M$ сукись, ответсвенно заявляю

Добавлено: 14 июл 2006, 18:21
vg
george писал(а):
Короче, пришлось все немного поломать. M$ сукись, ответсвенно заявляю

Может лучше тогда другую платформу поискать?
Добавлено: 14 июл 2006, 18:28
george
Не юродствуй
Добавлено: 14 июл 2006, 18:30
SlavaM
vg писал(а):george писал(а):
Короче, пришлось все немного поломать. M$ сукись, ответсвенно заявляю

Может лучше тогда другую платформу поискать?
А че, кто-то знает платформу, где в документации все досконально описано? Просто интересуюсь. Наверное те, кто кричат что-то про МС сакс - те знают, да?
Добавлено: 14 июл 2006, 18:38
vg
SlavaM писал(а):vg писал(а):george писал(а):
Короче, пришлось все немного поломать. M$ сукись, ответсвенно заявляю

Может лучше тогда другую платформу поискать?
А че, кто-то знает платформу, где в документации все досконально описано? Просто интересуюсь. Наверное те, кто кричат что-то про МС сакс - те знают, да?
Лично я в М$шоп. Не жалуюсь.
Добавлено: 14 июл 2006, 18:39
vg
george писал(а):Не юродствуй
Юродство - это счастье.
Добавлено: 14 июл 2006, 18:44
george
Да ну вас нафик... Должны же быть limitations какие-то описаны