![>](style_images/1/nav_m.gif)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.219.200.80] |
![]() |
|
Сообщ.
#1
,
|
|
|
Загружаю данные в MSHFlexGrid с помощью MSHFlexGrid.DataSource, поля с типом данных в БД Mysql Decimal отображаются в MSHFlexGrid не такак в БД.
Если в БД строка 0.20 в MSHFlexGrid отображается как .20 |
![]() |
Сообщ.
#2
,
|
|
Цитата valdemar_ru @ Если в БД строка 0.20 в MSHFlexGrid отображается как .20 Если в БД действительно СТРОКА - значит, в свойствах флекса формат поля чисельный... |
Сообщ.
#3
,
|
|
|
Цитата Akina @ Цитата valdemar_ru @ Если в БД строка 0.20 в MSHFlexGrid отображается как .20 Если в БД действительно СТРОКА - значит, в свойствах флекса формат поля чисельный... в БД тип поля Decimal. В MSHFlexGrid все по умолчанию. В MSHFlexGrid можно задать формат вывода данных? |
![]() |
Сообщ.
#4
,
|
|
Выложи минимальный проект плюс минимальный скрипт для создания и наполнения MySQL-БД (или минимальный дамп) - потестировать.
Уж больно странно... по-моему, не в гриде дело. |
Сообщ.
#5
,
|
|
|
Цитата Akina @ Выложи минимальный проект плюс минимальный скрипт для создания и наполнения MySQL-БД (или минимальный дамп) - потестировать. Уж больно странно... по-моему, не в гриде дело. дамп таблицы. Поле KOL_UPAK Прикреплённый файл ![]() |
Сообщ.
#6
,
|
|
|
Akina
не получилось посмотреть ? |
Сообщ.
#7
,
|
|
|
valdemar_ru
Akina обещал, значит сделает: 4 дня - не срок. Ты только топик не забывай поднимать апами. |
![]() |
Сообщ.
#8
,
|
|
valdemar_ru, я всё жду, когда Вы выполните ВСЮ просьбу, а не её кусочек, и выложите в дополнение к дампу минимальный проект, в котором проблема воспроизводится.
|
Сообщ.
#9
,
|
|
|
Цитата valdemar_ru @ Если в БД строка 0.20 в MSHFlexGrid отображается как .20 Нужно посмотреть на региональные стандарты, может у тебя ОС Английская, или настройки чисел по другому. |
Сообщ.
#10
,
|
|
|
Цитата coder @ Цитата valdemar_ru @ Если в БД строка 0.20 в MSHFlexGrid отображается как .20 Нужно посмотреть на региональные стандарты, может у тебя ОС Английская, или настройки чисел по другому. C:\Documents and Settings\Valdemar>systeminfo Язык системы: ru;Русский Язык ввода: en-us;Английский (США) вот скрин региональных стандартов Прикреплённая картинка
![]() Добавлено Цитата Akina @ valdemar_ru, я всё жду, когда Вы выполните ВСЮ просьбу, а не её кусочек, и выложите в дополнение к дампу минимальный проект, в котором проблема воспроизводится. Вот минимальный проект Прикреплённый файл ![]() |
![]() |
Сообщ.
#11
,
|
|
valdemar_ru, вынужден тебя огорчить - это не лечится.
Начальный ноль теряется в момент преобразования числа в текст на выходе из ODBC-драйвера. И это описано в документации: Цитата Rules for Conversions [удалено] Character Source to Numeric Target Following are the rules for converting from a character source (CS) to a numeric target (NT): 1) Replace CS with the value obtained by removing any leading or trailing spaces in CS. If CS is not a valid numeric-literal, SQLSTATE 22018 (Invalid character value for cast specification) is returned. 2) Replace CS with the value obtained by removing leading zeroes before the decimal point, trailing zeroes after the decimal point, or both. 3) Convert CS to NT. If the conversion results in a loss of significant digits, SQLSTATE 22003 (Numeric value out of range) is returned. If the conversion results in the loss of nonsignificant digits, SQLSTATE 01S07 (Fractional truncation) is returned. [удалено] Самый простой имхо выход - создать в промежутке между приложением и табюлицей вьюшку, которая заменит тип этого поля с чисельного на текст: ![]() ![]() CREATE OR REPLACE VIEW v_rezept AS SELECT ... , CAST(`kol_upak` AS CHAR) `kol_Upak`, ... FROM rezept; и получать данные для грида из вьюшки. |
Сообщ.
#12
,
|
|
|
Akina
Спасибо. Я сейчас так и делаю только без ![]() ![]() CREATE OR REPLACE VIEW v_rezept ![]() ![]() SELECT ... , CAST(`kol_upak` AS CHAR) `kol_Upak`, ... FROM rezept; Я делал по инсрукции из этого источника http://azbukavb.narod.ru/teorie/MSHFlex1.html пункт: Программное связывание данных с элементом управления Hierarchical FlexGrid ![]() ![]() DIM Cn As New Connection, Rs As New Recordset ' Заменить <myDataSource> действительным DSN на вашей системе Cn.ConnectionString = "DSN=<myDataSource>" ' Используйте следующий код для SHAPE Commands Cn.Provider = "MSDataShape" Cn.CursorLocation = adUseNone 'Этот код для SQL Commands Cn.CursorLocation = adUseNone Cn.Open ' Необходимо задать правильный источник данных для используемого ' набора Recordset для созданного выше Connection Rs. Source = "<valid SQL SELECT command>" ' Теперь ассоциировать Command с Connection и выполнить их Set Rs.ActiveConnection = Cn Rs.Open Вставить следующий код для присваивания открытого набора Recordset в Rs элементу управления Hierarchical FlexGrid: Set MSHFlexGridI.DataSource = Rs Мне не понятна эта строчка ![]() ![]() Cn.Provider = "MSDataShape" ![]() ![]() Public conn As ADODB.Connection Set conn = New ADODB.Connection conn.ConnectionString = "DRIVER=" & "{MySQL ODBC 3.51 Driver}" & ";" & _ "SERVER=" & "localhost" & ";" & _ "DATABASE=" & "region" & ";" & _ "UID=" & "root" & ";" & _ "PASSWORD=" & "123" & ";" & _ "OPTION=" & "35" & ";" conn.Provider = "MSDataShape" conn.Open И еще такой момент, если MSHFlexgrid заполнять через ![]() ![]() MSHFlexGrid1.TextMatrix(0, 0)=recordset.Fields("index") поля заполняются с форматирвоанием т.е. если БД идет 2010-08-08 в гриде 08.08.2010 или 0.60 а гриде 0,60. Этот вариант не подходит правда, если надо заполнить более 2000 строк vb6 зависает. |
![]() |
Сообщ.
#13
,
|
|
valdemar_ru
Использование статического преобразующего запроса в коде лишает гибкости. Потому я этот самый очевидный вариант не указал. Цитата valdemar_ru @ Мне не понятна эта строчка ![]() ![]() Cn.Provider = "MSDataShape" Это специальный СОМ-компонент-провайдер, позволяющий формировать и передавать в рекордсете иерархические данные. Иными словами, позволяющий формировать "рекордсет в рекордсете". В твоём случае он не нужен - у тебя данные планарные. Кстати, непонятно, почему ты использовал иерархический флекс, а не обычный... подробнее см. отсюда. |
Сообщ.
#14
,
|
|
|
Akina
Цитата Кстати, непонятно, почему ты использовал иерархический флекс, а не обычный я в Vb не силен только учусь. в описание написано он по функционалу побольше будет, поэтому и решил сразу изучать MSHFlexgrid. если не указывать ![]() ![]() conn.Provider = "MSDataShape" Спасибо за помощь буду дальше разбираться |