powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Преобразование типов
10 сообщений из 10, страница 1 из 1
Преобразование типов
    #32349561
Bron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используя ADO через ODBC обращаюсь к dbf таблице. В запросе возникла потребность в преобразование типов, к примеру из строки в int. Какую функцию в SQL запросе можно использовать для этих целей?

Покапавшись в MSDN по функциям преобразованиям ничего не нашел, но попробовал использовать некоторые функции с Visual Basic, к примеру CLng (имя_поля), оказывается работает;)

Но в моем конкретном случае это не помогает, так в ниже приведенном случае в таблице phones поле phone представлено как char (4) и в этом поле значения телефона представлены не как строка, а как int, к примеру 1 будет представлено физически в таблице как 00 00 00 01. И эти значения отображаются как null.

На тестовом компьютере установлен MDAC 2.8

Примера условного кода для вывода телефонного справочника на Visual Basic Script

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim con
set con = CreateObject ( "ADODB.Connection" )
con.Open  "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277 ;Dbq=c:\dbf;" 'строка соединения с бд

Dim cmd
set cmd = CreateObject ( "ADODB.Command" )
Set cmd.ActiveConnection = con
cmd.CommandText =  "select fio, phone from phones" 

Do While Not rs.Eof 
	Dim fio, phone
	fio	= rs ( "fio" )
	phone = rs ( "phone" )
	rs.MoveNext 
	if IsNull (phone) Then phone =  "[null]" 

	WScript.Echo fio & Chr ( 9 )  & phone
	
Loop
...
Рейтинг: 0 / 0
Преобразование типов
    #32349605
Por
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Por
Гость
Не знаю, как dBase`овский драйвер воспримет фоксовые команды, но с OLEDB Provider for Visual FoxPro, а так же с Visual FoxPro ODBC прокатывало использование Фоксовских функций в SQL-запросе.

Например так:
Код: plaintext
1.
cmd.CommandText =  "select fio, val(phone) as phone from phones" 


Visual FoxPro Language Reference
...
VAL( ) returns the numbers in the character expression from left to right until a non-numeric character is encountered (leading blanks are ignored). VAL( ) returns 0 if the first character of the character expression isn't a number or a plus sign (+) or minus sign (-).
...
Рейтинг: 0 / 0
Преобразование типов
    #32349621
Por
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Por
Гость
Сразу не въехал %+

Скорее всего вот что нужно:


Use CTOBIN(cExpression) to convert a binary character representation back to its integer value.
...
Рейтинг: 0 / 0
Преобразование типов
    #32349696
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотри описание функций для FoxPro

STR()
PADL()
PADR()
PADC()
TRANSFORM()

Например, можно так

Код: plaintext
SELECT fio, STR(phone) as phone FROM phones


Тип Integer физически и хранится в 4 байтах. Но разумеется хранится не как 4 символа. Нужен пересчет ASCII-кодов соответсвующих символов, если не ошибаюсь, то примерно так:

ASCII_1*256*256*256+ASCII_2*256*256_ASCII_3*256+ASCII_4

Здесь ACSII_1, ACSII_2, ACSII_3, ACSII_4 - это ASCII-коды соотсветствующих символов справа налево.
...
Рейтинг: 0 / 0
Преобразование типов
    #32349708
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже перепутал. Это было из числа в строку. А из строки в число соответсвенно:

VAL(phone) - возможно добавление дробной части
INT(VAL()) - выделение целой части из числа

Только имей в виду, что в число будут переведен тот фрагмент строки где есть только цифры и разделитель целой и дробной части. Если номер телефона записан в виде

123-45-67

то функция VAL("123-45-67") вернет 123
...
Рейтинг: 0 / 0
Преобразование типов
    #32349839
Bron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Супер, даже не ожидал такой поддержки.
1. пришлось поставить OLE DB Provider for Visual FoxPro с Microsoft, а вот по Visual FoxPro документации хватило, что бы уже со всем остальным разобраться. И мое мнение это самый нормальный провайдер для того чтобы работать с DBF файлами.
2. так строки хранились в cp866, пришлось воспользоваться CPCONVERT (866, 1251, fio)
3. Ну а насчет данных как правильно подсказал Por воспользовался функцией CTOBIN


Конечный вариант, правда у меня phone chr (2)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Dim con
set con = CreateObject ( "ADODB.Connection" )
con.Open  "Provider=vfpoledb.1 ;Data Source=C:\DBF;Collating Sequence=RUSSIAN"

Dim cmd
set cmd = CreateObject ( "ADODB.Command" )
Set cmd.ActiveConnection = con
cmd.CommandText =  "select CPCONVERT (866 ,  1251 , fio),  32768  + CTOBIN (phone) from phones"
Do While Not rs.Eof 
	Dim fio, phone
	fio	= rs ( "fio" )
	phone = rs ( "phone" )
	rs.MoveNext 
	if IsNull (phone) Then phone =  "[null]" 

	WScript.Echo fio & Chr ( 9 )  & phone
Loop
...
Рейтинг: 0 / 0
Преобразование типов
    #32350195
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpconvert кстати использовать не обязатально.
Достаточно выложить рядом с драйвером файл config.fpw в котором будет строчка
CODEPAGE = 866
Почитайте описание к драйверу...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Преобразование типов
    #36614264
Raddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как можно преобразовать тип float в строку
STR не работает
...
Рейтинг: 0 / 0
Преобразование типов
    #36614371
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Raddyкак можно преобразовать тип float в строку
STR не работает1) что пишет?
2) cast() ?
...
Рейтинг: 0 / 0
Преобразование типов
    #36614919
Raddy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уже разобрался, спасибо!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Преобразование типов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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