Страница 1 из 1
Создание идентификатора
Добавлено: 10 янв 2018, 06:15
Shtr1h_KoT
Есть векторка с атрибутами, нужно создать идентификатор в созданной символьной колонке, назовем ее "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 символов. В бейзеке мало шарю, но что то уже пишу. Вечером постараюсь приложить код к теме, который некорректно работает. Заранее спасибо!
Re: Создание идентификатора
Добавлено: 10 янв 2018, 10:04
freeExec
Код: Выделить всё
Dim G = Str(A) + " " + Str(B) + Str(C) + " " + Str(E) + Str(F)
Re: Создание идентификатора
Добавлено: 10 янв 2018, 15:24
Boris
freeExec писал(а): ↑10 янв 2018, 10:04
Dim G = Str(A) + " " + Str(B) + Str(C) + " " + Str(E) + Str(F)
Все же автор хотел ВСЕ колонки разделить нулями(
) или пробелами. Даже, если в примере сделал не совсем так.
Поскольку формально вы ему уже ответили, то рискну указать на странность исходных данных и желания автора:
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")
Re: Создание идентификатора
Добавлено: 11 янв 2018, 15:43
Shtr1h_KoT
Спасибо, сделал.
Boris писал(а): ↑10 янв 2018, 15:24
команды Мапбасика тут конечно необходимы, но вот программировать на нем - это уже избыточно
Так как работаю в команде объяснять каждому, как делать Sql запросы очень проблематично. А тут кнопку сделал и пусть все по ней тыкают
Boris писал(а): ↑10 янв 2018, 15:24
Разделять нулем?
Ну да, глупая была затея
Boris писал(а): ↑10 янв 2018, 15:24
А почему поля в два или три разряда без десятичных знаков названы десятичными?
Такую требуют, я бы все в короткие загнал
Вот вообщем, что хотел. Была идея с функцией, но их пока не умею правильно применять.
Завтра попробую результат на деле.
Код: Выделить всё
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
Re: Создание идентификатора
Добавлено: 11 янв 2018, 16:05
jerry-maori
разделять нулями, пробелами, табуляциями -- это раскладывать грабли...
есть жи нижнее подчёркивание...