MEMO на SQL Server

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

MEMO на SQL Server

Сообщение abc » 11.08.2004 (Ср) 10:57

У меня есть две одинаковые б.д.
Одна *.mdb , другая SQL Server

В случае б.д. на SQL Server
Когда я делаю выборку и заполняю поля формы (VB 6.0)

TxtNotes = rs!Notes (тип данных МЕМО) выдает ошибку.
На другие поля не ругается и в случае *.mdb нормально съедает эту строку.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 11.08.2004 (Ср) 11:15

Через объект Stream.
Код: Выделить всё
Set Stream1 = New ADODB.Stream
With Stream1
  .Type = adTypeText
  .Open
  .Write Recorset1.Fields("Text").value
  txtText.text = .Read
  .Close
End With
Set Stream1 = Nothing

abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

Сообщение abc » 11.08.2004 (Ср) 12:03

Проблемма в том что я могу использовать только модель DAO (таково условие заказчика)

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 11.08.2004 (Ср) 12:57

хех, а что за ошибка? И зачем MEMO?

Ведт в SQL сервере текстовое поле може быть поболе 255
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 11.08.2004 (Ср) 13:45

тогда юзай свойство GetChunk у нужного тебе поля, чтобы данные взять в байтовый массив

abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

Сообщение abc » 11.08.2004 (Ср) 14:35

МЕМО досталось по наследству.
Клиентская часть одна для центрального офиса где б.д. на SQL Server (раньше тоже было *mdb) и для перефирии где б.д. *.mdb поэтому DAO

Что обидно QueryAnalyzer нормально выполняет запрос.

Полезу в Хелп. Что оно за GetChunk...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 11.08.2004 (Ср) 17:47

Вообще должно работать.
Ты не написал что за ошибку выдает...

Ошибка у тебя может быть в двух вариантах:

1. Значение поля NULL
2. Слишком большая длина текста в этом поле (натыкаешься на ограничение TextBox-a)
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

Сообщение abc » 11.08.2004 (Ср) 17:57

Не Null и не Empty - проверял к тому же
QueryAnalyzer выдает нормальный текст.
Ошибка:
Invalid cursor position S1109 Run-time error'0'

DATALENGTH() выдает 432
Если большая длина текста, что делать?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 12.08.2004 (Чт) 7:18

DATALENGTH() выдает 432
Если большая длина текста, что делать?


Да это совсем не большая длина текста.
В TextBox влазит от 32K до 64K (зависит то ли от операционки, толи от версии сервис пака - точно не помню).

Трудно сказать что там у тебя - с DAO я не работаю уже много лет - MS сказал про него забыть, я и забыл. Да и в те годы прошлого века когда я еще работал с DAO пользовал только MDB-шки. А с MS SQL начал сразу через ADO...

Интересно, а чем заказчик обосновывает свою любовь к почившему в мире DAO???
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

Сообщение abc » 12.08.2004 (Чт) 8:49

Для интересующихся: У нас более 300 офисов по всей Украине. Везде б.д. *mdb , в клиентской части масса запросов объкт DAO. В центральном офисе б.д. сейчас переносим на SQL сервере. Задача в том что б с мин. изменениями, прога. работали и с *mdb, и SQL Server.

Всет аки хотелось бы получить совет:
Что делать, что бы -
TxtNotes = rs!Notes работал?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 12.08.2004 (Чт) 11:04

А в переменную rs!Notes у тебя вообще читается?

Может с драйвером ODBC что-то не то...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

Сообщение abc » 12.08.2004 (Чт) 11:11

В переменную тоже не читается.
Что может быть с драйвером ODBC ?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 12.08.2004 (Чт) 11:37

Что может быть с драйвером ODBC ?

Дык кто-ж тебя знает.
Вот специально попробовал с DAO - все работает на ура:

Код: Выделить всё
Public Sub Main()
    Dim db As DAO.Database
    Dim r As DAO.Recordset, s As String
   
    Set db = DBEngine.OpenDatabase("MyDB", dbDriverNoPrompt, True, _
        "ODBC;DRIVER=SQL Server;SERVER=MyServer;DATABASE=MyDB;UID=sa;PWD=MyPassword")
    Set r = db.OpenRecordset("SELECT * FROM tblКлиенты WHERE ID_Клиента=17558", dbOpenDynaset, dbSeeChanges)
    s = r!Примечание
    Debug.Print s
End Sub


Да-на машине: Win2000, Office 2003, ADO 2.8, DAO 3.6
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 12.08.2004 (Чт) 11:56

Возник вдруг вопрос.
А какой тип данных у поля [Notes] на SQL-сервере?
Во что Access-овское MEMO преобразовываешь?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.08.2004 (Чт) 13:09

Вроде бы как WChar.
Подключи ADOX и посмотри, точно не помню, а проверить не на чем.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.08.2004 (Пт) 7:33

WChar - это символьное фиксированной ширины, уникод (nchar по SQL-серверному).
А аналог Memo на MS SQL - это text/ntext.
Впрочем, в их задаче Memo может быть и не обязателен - может оказаться вполне достаточным того-же varchar длиной 2000 (к примеру). Но это уже по месту надо смотреть.

Ну а что у них глючит - скорей всего что-то в настройках сервера/ODBC - отсюда не видно...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

abc
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 09.07.2004 (Пт) 17:31
Откуда: Kiev

Сообщение abc » 13.08.2004 (Пт) 9:59

При экспорте б.д. из Access на SQL Server поля МЕМО сохранились как ntext

В присланом примере это поля действительно открываются, но зато валится на UNION.

Я делал так:
DBEngine.RegisterDatabase txtName, "SQL Server", True, "Database=" & strBD & vbCr & "Trusted_Connection=Yes" & vbCr & _
"Server=" & strServer
Set wrkODBC = CreateWorkspace("ODBCWorkspace", "admin", "", dbUseODBC)
Set db =wrkODBC.OpenDatabase(txtName, dbDriverNoPrompt, False)
Union отрабатывает нормально, но валится на ntext


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList  
cron