Создание идентификатора
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 30 сен 2016, 19:00
- Репутация: 0
Создание идентификатора
Есть векторка с атрибутами, нужно создать идентификатор в созданной символьной колонке, назовем ее "G". идентификатор записывается путем соединения значения других колонок a,b,c,d,e,f, т.е g=a+b+c+d+e+f. Причем a,...,f - десятичные. a(2.0), b(3.0), c(3.0),d(3.0),e(4.0),f(3.0). К тому же разделение должно производится путем разделения их пробелами или нулями. Пример : a-54, b-34, c-184, d-1, e-304, f-212. Результат : G = 54 34184 1 304212. В итоге получилось 18 символов. В бейзеке мало шарю, но что то уже пишу. Вечером постараюсь приложить код к теме, который некорректно работает. Заранее спасибо!
-
- Гуру
- Сообщения: 1195
- Зарегистрирован: 23 апр 2011, 10:32
- Репутация: 205
- Откуда: Ульяновск
Re: Создание идентификатора
Код: Выделить всё
Dim G = Str(A) + " " + Str(B) + Str(C) + " " + Str(E) + Str(F)
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Создание идентификатора
Все же автор хотел ВСЕ колонки разделить нулями( ) или пробелами. Даже, если в примере сделал не совсем так.
Поскольку формально вы ему уже ответили, то рискну указать на странность исходных данных и желания автора:
1. команды Мапбасика тут конечно необходимы, но вот программировать на нем - это уже избыточно. Для получения результата хватит обычного запроса SQL или если "твердая" колонка все же необходима, то запроса Update.
2. Разделять нулем? Да еще данные разной разрядности - давно не видел. Хоть бы к единому формату "000" привели сперва, в ином случае - это что угодно, только не идентификатор в значении "уникальное поле, при условии уникальности всех колонок".
3. А почему поля в два или три разряда без десятичных знаков названы десятичными? Они даже Integer не являются - SmallInt вполне достаточно.
4. Для получения заявленной разрядности в 18 символов следует связать между собой результат функции Format$
Код: Выделить всё
Format$(54,"00\ ")+Format$(34,"000\ ")+ ... + Format$(212,"000")
Код: Выделить всё
Update [table] Set G=Format$(a,"00\ ")+Format$(b,"000\ ")+ ... + Format$(f,"000")
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 30 сен 2016, 19:00
- Репутация: 0
Re: Создание идентификатора
Спасибо, сделал.
Вот вообщем, что хотел. Была идея с функцией, но их пока не умею правильно применять.
Завтра попробую результат на деле.
Так как работаю в команде объяснять каждому, как делать Sql запросы очень проблематично. А тут кнопку сделал и пусть все по ней тыкают
Ну да, глупая была затея
Такую требуют, я бы все в короткие загнал
Вот вообщем, что хотел. Была идея с функцией, но их пока не умею правильно применять.
Завтра попробую результат на деле.
Код: Выделить всё
Alter table tab (Modify G char(18))
Fetch First From tab
ColName = ""
space1 = Space$(1)
space2 = Space$(2)
space3 = Space$(3)
For i = 1 To TableInfo(tab, TAB_INFO_NROWS)
Fetch Rec i From Tab
'________________________________________________________________________
lcA =Str$(Tab.A)
'________________________________________________________________________
If Len(Str$(Tab.B)) = 1 Then
lcB =space2 + Str$(Tab.B)
ElseIf Len(Str$(Tab.B)) = 2 Then
lcB =space1 + Str$(Tab.B)
Else
lcB =Str$(Tab.B)
End If
'________________________________________________________________________
If Len(Str$(Tab.C)) = 1 Then
lcC=space2 + Str$(Tab.C)
ElseIf Len(Str$(Tab.C)) = 2 Then
lcC=space1 + Str$(Tab.C)
Else
lcC=Str$(Tab.C)
End If
'________________________________________________________________________
If Len(Str$(Tab.D)) = 1 Then
lcD=space2 + Str$(Tab.D)
ElseIf Len(Str$(Tab.D)) = 2 Then
lcD=space1 + Str$(Tab.D)
Else
lcD=Str$(Tab.D)
End If
'________________________________________________________________________
If Len(Str$(Tab.E)) = 1 Then
lcE=space3 + Str$(Tab.E)
ElseIf Len(Str$(Tab.E)) = 2 Then
lcE=space2 + Str$(Tab.E)
ElseIf Len(Str$(Tab.E)) = 3 Then
lcE=space1 + Str$(Tab.E)
Else
lcE=Str$(Tab.E)
End If
'________________________________________________________________________
If Len(Str$(Tab.F)) = 1 Then
lcF=space2 + Str$(Tab.F)
ElseIf Len(Str$(Tab.F)) = 2 Then
lcF=space1 + Str$(Tab.F)
Else
lcF=Str$(Tab.F)
End If
'________________________________________________________________________
ColName = lcA + lcB+lcC+lcD+lcE+lcF
Update Tab
Set G = ColName
Where RowID = i
Next
Commit Table Tab
close all interactive
- jerry-maori
- Гуру
- Сообщения: 585
- Зарегистрирован: 22 авг 2012, 17:02
- Репутация: 143
- Откуда: Нижний Новгород
Re: Создание идентификатора
разделять нулями, пробелами, табуляциями -- это раскладывать грабли...
есть жи нижнее подчёркивание...
есть жи нижнее подчёркивание...
Кто сейчас на конференции
Сейчас этот форум просматривают: Ahrefs [Bot] и 8 гостей