powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Функция, запись данных из в поля формы в таблицу.
31 сообщений из 31, показаны все 2 страниц
Функция, запись данных из в поля формы в таблицу.
    #39413978
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! есть поле в форме вот с такими данными:

49,0840388888889 55,8483944444444
49,0758420621239 55,848868421318
49,0755923105285 55,8510254478631
49,0667690295303 55,8510602052147
49,0669888498878 55,8590267224895
49,072003740708 55,859278497036
49,0740250881726 55,8640417330845
49,0763634133865 55,8644822772042
49,0793085126276 55,8692599425676
49,077035350807 55,8695706214117
49,077118035886 55,8720531362307
49,0839775997428 55,8723909134901
49,085085495203 55,870734780173
49,0957224166008 55,8714768922188
49,1048214234981 55,8679821314794
49,1059956676562 55,8649419488701
49,1078564979425 55,8625470640388
49,1106863940431 55,8613210507663
49,1067536240092 55,8577984634221
49,0985710398202 55,8551910660467
49,0879508739187 55,8479290756276
Данные в поле записаны через знак табуляции и знак абзаца.

Как записать можно данные из поля формы записались в табл1 (2 столбца: X,Y)?
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39413983
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pnnkazanесть поле в форме вот с такими данными

эта куча в одном мемо поле или одна строка - это одна запись в таблице?
однако очень существенно...
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39413984
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag, поле MEMO в форме (свободное)
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39413990
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вангую:
если поле в форме такие данные с клавиатуры не внесешь т.к нажатие TAB или ENTER перемещает в следующее поле
если для постоянного пользования лучше сделать форму на таблице с полями X и Y
если разово то добавить в таблицу поле с данными (ctl),выполнить процедуру и удалить его (если Акцесс ниже 2007 использовать DAO)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub my()
Dim rs As Recordset, a
Set rs = CurrentDb.OpenRecordset("tbl")
Do Until rs.EOF
a = Split(rs!ctl, Chr(32)) 'или другой разделитель
rs.Edit
rs!x = a(0)
rs!y = a(1)
rs.Update
rs.MoveNext
Loop
End Sub
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39413992
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pnnkazanvmag, поле MEMO в форме (свободное)А откуда в свободном поле данные ???
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39413998
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pnnkazan,

Функцию писать было лень...
1. Скопировал в буфер вашу кучу...
2. Сохранил как есть в текстовом файле.
3. В БД внешние данные - связь с таблицами выбрал тип txt и текстовый файл.
В мастере выбрал разделитель Табуляция и определил свойства полей как текстовые, чтоб не потерять разряды (можете еще назвать Х и Y).
В результате ваша связанная искомая таблица...
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414009
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, vmag, в реале есть файл *.kml в кодировке utf-8, внутри текст:
<?xml version="1.0" encoding="UTF-16"?><kml xmlns=" http://earth.google.com/kml/2.2"><Document xmlns=""><mapName>Казань</mapName><name>1.kmz</name><Style id="Новый многоугольник_Style_00000000"><LabelStyle><color>ff000000</color><scale>1</scale><face>Arial</face><visible>0</visible><style>00000000</style></LabelStyle><LineStyle><color>ff000099</color><width>00000001</width></LineStyle><PolyStyle><color>ff99ffff</color><fill>0</fill><outline>1</outline></PolyStyle><ListStyle/></Style><Placemark id="4"><name>Новый многоугольник</name><visibility>1</visibility><styleUrl>#Новый многоугольник_Style_00000000</styleUrl><Polygon><outerBoundaryIs><LinearRing><coordinates>49.0840388888889,55.8483944444444,0 49.0758420621239,55.848868421318,0 49.0755923105285,55.8510254478631,0 49.0667690295303,55.8510602052147,0 49.0669888498878,55.8590267224895,0 49.072003740708,55.859278497036,0 49.0740250881726,55.8640417330845,0 49.0763634133865,55.8644822772042,0 49.0793085126276,55.8692599425676,0 49.077035350807,55.8695706214117,0 49.077118035886,55.8720531362307,0 49.0839775997428,55.8723909134901,0 49.085085495203,55.870734780173,0 49.0957224166008,55.8714768922188,0 49.1048214234981,55.8679821314794,0 49.1059956676562,55.8649419488701,0 49.1078564979425,55.8625470640388,0 49.1106863940431,55.8613210507663,0 49.1067536240092,55.8577984634221,0 49.0985710398202,55.8551910660467,0 49.0879508739187,55.8479290756276,0</coordinates></LinearRing></outerBoundaryIs></Polygon></Placemark></Document></kml>
Это область с координатами, внутри которой находятся компании, все координаты перечислены по порядку и соединены прямыми линями. По идее было бы хорошо, это: 1. Имортировать файл куда то в буфер. 2. Фильтровать и преобразовать до такого состояния: 49,0840388888889 55,8483944444444
49,0758420621239 55,848868421318
49,0755923105285 55,8510254478631
49,0667690295303 55,8510602052147
49,0669888498878 55,8590267224895
49,072003740708 55,859278497036
49,0740250881726 55,8640417330845
49,0763634133865 55,8644822772042
49,0793085126276 55,8692599425676
49,077035350807 55,8695706214117
49,077118035886 55,8720531362307
49,0839775997428 55,8723909134901
49,085085495203 55,870734780173
49,0957224166008 55,8714768922188
49,1048214234981 55,8679821314794
49,1059956676562 55,8649419488701
49,1078564979425 55,8625470640388
49,1106863940431 55,8613210507663
49,1067536240092 55,8577984634221
49,0985710398202 55,8551910660467
49,0879508739187 55,8479290756276
3. Записать в таблицу

Пока сделал так:
просто открываю файл блокнотом, вставляю в пустое поле формы, нажимаю кнопку, текст преобразуется до этого состояния. А дальше как раз и спрашиваю как записать в таблицу
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414024
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pnnkazan, а как эти данные будут в дальнейшем использоваться? И много ли будет записей?
Хранить данные нужно так, ИМХО, как они будут использоваться в дальнейшем.
Подобные данные можно хранить как XML в поле мемо или двоичные данные сохранённого массива в поле объекта OLE.
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414069
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pnnkazan,

Вы бы лучше сам файл пристегнули...
То что вы сюда выкинули не открывается как xml файл ни браузером и вообще ничем как xml...
В старших версиях (2010) любой правильный файл xml пристегивается на ура с разбивкой по таблицам и в соответствии со структурой (см. пример на картинке)...
Если такой возможности нет, ищите в поиске на сайте "импорт xml", но опять же - речь идет об импорте правильного файла...
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414085
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag, Панург, сам файл создается в других географических системах https://ru.wikipedia.org/wiki/KML . Таких файлов каждый месяц может быть десятками. Из этого файла нужны только координаты сектора, которые лучше хранить во временной таблице1. Так же есть база адресов с ID адреса и координатами, и База компаний, где у каждой есть от 0 до n.. адресов с Id адреса.
Задача по сути в следующем:
1. Это загрузить такие файлы в базу.
2. Вытащить из них координаты секторов и название сектором по Name.
3. в отдельной таблице0 создать (Id сектора; Название сектора)
4. Записать во временную таблицу1 строго по порядку координаты (ID координат сектора; Id сектора; координата X; координата Y).
5. Определить Max(X;Y) и Min(X;Y) координаты по каждому сектору.
6. Функцией триангулирования прогнать каждый объект карты (здание) попадающее в диапазон по Max и Min.
7. В таблицу2 записать Id адреса и Id сектора (это будут объекты карты, которые находятся в данном секторе)
8. После записи в таблицу2, таблицу1 можно удалить она больше не нужна.
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414096
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pnnkazan,
KML (от англ. Keyhole Markup Language — язык разметки Keyhole) — язык разметки на основе XML для представления трёхмерных геопространственных данных в программе «Google Планета Земля» («Keyhole» до её приобретения «Google»).
навряд-ли акцесс что-либо сделает с этим файлом
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414102
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku... навряд-ли акцесс что-либо сделает с этим файлом
Access сделает то, чего мы его попросим,
предварительно научив делать это.

Я вот, например, "попросил" "нарисовать" :)
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414104
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pnnkazan,

Ну вот теперь файл dok.kml правильный, если сменить расширение на xml - в браузере открывается (см. картинку)...
В общем ищите по форуму "импорт xml" и в путь...
Для бесплатной работы ваше ТЗ крутовато, если со знанием дела, то пол дня - день убить точно придется...
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414105
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не охота разбираться с xml - загоняйте файл в строку, выкусывайте всё что нужно и ...
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414107
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared,
"научить" Access рисовать (где-то читал,но никогда не использовал-max вставлял что-то готовое) это вполне реально-а вот работать с файлом имеющим расширение .kml "научить" не удастся
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414114
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku...а вот работать с файлом имеющим расширение .kml "научить" не удастся
Почему это?

Вот научить за пивом Access бегать тяжеловато,
а с файлами работать - вполне реально,
в том числе и с kml.
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414118
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел вот такой модуль для открытия файлов. Теперь думаю, а можно ли сразу с десяток файлов записать в таблицу с полем memo.

Private Sub Кнопка9_Click()
' Requires reference to Microsoft Office 11.0 Object Library.

Dim fDialog As Office.FileDialog
Dim varFile As Variant

' Clear listbox contents.
'Me.FileList.RowSource = ""

' Set up the File Dialog.
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)

With fDialog

' Allow user to make multiple selections in dialog box
.AllowMultiSelect = True

' Set the title of the dialog box.
.Title = "Выберете файлы границ секторов для импорта"

' Clear out the current filters, and add our own.
.Filters.Clear
.Filters.Add "Keyhole Markup Language", "*.KML"

' Show the dialog box. If the .Show method returns True, the
' user picked at least one file. If the .Show method returns
' False, the user clicked Cancel.
If .Show = True Then

'Loop through each file selected and add it to our list box.
For Each varFile In .SelectedItems
'Me.FileList.AddItem varFile
Next

Else
'MsgBox "You clicked Cancel in the file dialog box."
End If
End With
End Sub
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414807
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuВангую:
если поле в форме такие данные с клавиатуры не внесешь т.к нажатие TAB или ENTER перемещает в следующее поле
если для постоянного пользования лучше сделать форму на таблице с полями X и Y
если разово то добавить в таблицу поле с данными (ctl),выполнить процедуру и удалить его (если Акцесс ниже 2007 использовать DAO)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub my()
Dim rs As Recordset, a
Set rs = CurrentDb.OpenRecordset("tbl")
Do Until rs.EOF
a = Split(rs!ctl, Chr(32)) 'или другой разделитель
rs.Edit
rs!x = a(0)
rs!y = a(1)
rs.Update
rs.MoveNext
Loop
End Sub



Сделал в итоге импорт файлов kml, в конечном счете запросом выдергивается данные, и имееют вид как в приложенной картинке.
Сами данные:
49,0840388888889:55,8483944444444;49,0758420616469:55,8488684256352;49,0755923100512:55,8510254521809;49,0667690290435:55,8510602095323;49,066988849401:55,8590267268095;49,0720037402266:55,8592785013562;49,0740250876933:55,8640417374062;49,0763634129097:55,8644822815261;49,0793085121538:55,869259946891;49,0770353503307:55,8695706257352;49,0771180354098:55,8720531405549;49,0839775992738:55,8723909178146;49,0850854947352:55,870734784497;49,0957224161439:55,8714768965433;49,1048214230504:55,867982135803;49,1059956672097:55,8649419531928;49,1078564974979:55,8625470683608;49,1106863936013:55,861321055088;49,1067536235636:55,8577984677427;49,0985710393666:55,8551910703663;49,0879508734545:55,8479290799447


Теперь вопрос, как можно записать данные в таблицу, что бы они имели вид?
Id IdSector X Y
1 1 49,08403889 55,84839444
2 1 49,07584206 55,84886843
3 1 49,07559231 55,85102545
4 1 49,06676903 55,85106021
5 1 49,06698885 55,85902673
6 1 49,07200374 55,8592785
7 1 49,07402509 55,86404174
8 1 49,07636341 55,86448228
9 1 49,07930851 55,86925995
10 1 49,07703535 55,86957063
11 1 49,07711804 55,87205314
12 1 49,0839776 55,87239092
13 1 49,08508549 55,87073478
14 1 49,09572242 55,8714769
15 1 49,10482142 55,86798214
16 1 49,10599567 55,86494195
17 1 49,1078565 55,86254707
18 1 49,11068639 55,86132106
19 1 49,10675362 55,85779847
20 1 49,09857104 55,85519107
21 1 49,08795087 55,84792908
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414825
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pnnkazanТеперь вопрос, как можно записать данные в таблицу, что бы они имели вид?Зачем? Ты же данные всёодно похеришь потом. Создай массив и работай с ним.
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414833
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПанургpnnkazanТеперь вопрос, как можно записать данные в таблицу, что бы они имели вид?Зачем? Ты же данные всёодно похеришь потом. Создай массив и работай с ним.

Сейчас VBA слабая сторона, может подскажете как задать массив из запроса?
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414849
Коллега sdku вам уже дал направление. Открываете 1-й Recordset на своем запросе, а 2-й на таблице-получателе. Функцией Split с разделителем ";" получаете массив из пар значений, а Split с разделителем ":" для каждой пары получаете массив из 2-х отдельных значений. Все это и записываете во 2-й Recordset.
Если поля X и Y - числовые, то их тип должен быть Decimal. Кроме того, если в вашей системе десятичный разделитель - ",", то понадобится преобразование в числах "." на ",".
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39414863
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pnnkazanСейчас VBA слабая сторона, может подскажете как задать массив из запроса?Ты же собрался
pnnkazanФункцией триангулирования прогнать каждый объект карты (здание) попадающее в диапазон по Max и Min.Вот передавай туда строку из мемо поля, разбивай сплитом, а пары координат точек (чет-нечет) обрабатывай. Тип хватит и Double - координаты избыточны.

Смысла переводить в рекордсет не вижу вообще.
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39415100
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 проблемы:
1. Вылетает ошибка в строке rs2.X = Str(b(0)) - Method or data member not found
2. Если убрать rs2.X = Str(b(0)) и rs2.Y = Str(b(1)), и туда вставить rs2.С = a(i), то вроде записывается в тбл TSC в столбец С, но не всё, а в сумме по всему столбцу 247 символов, т.е. массив 'a' имеет в сумме максимум 247 символов.

В таблице TSC типы полей X,Y - одинарные с плавающей точкой, С - длинный текст, в таблице CRMTSCF поле CS - длинный текст.

Код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub my()
Dim rs1 As Recordset, a
Dim rs2 As Recordset, b
Set rs1 = CurrentDb.OpenRecordset("CRMTSCF")
Set rs2 = CurrentDb.OpenRecordset("TSC")
a = Split(rs1!CS, ";")
For i = LBound(a) To UBound(a)
b = Split(a(i), ":")
rs2.AddNew
rs2.X = Str(b(0))
rs2.Y = Str(b(1))
rs2.Update
Next i
End Sub



Подскажите пожалуйста, что не так?
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39415103
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такой список выдает:
49,0840388888889:55,8483944444444
49,0758420616469:55,8488684256352
49,0755923100512:55,8510254521809
49,0667690290435:55,8510602095323
49,066988849401:55,8590267268095
49,0720037402266:55,8592785013562
49,0740250876933:55,8640417374062
49,0763634129097:5
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39415109
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pnnkazan,
Выдержка из HELP:"Функция Split(Expression) возвращает одномерный массив с типом данных Variant (String) "
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39415111
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkupnnkazan,
Выдержка из HELP:"Функция Split(Expression) возвращает одномерный массив с типом данных Variant (String) "
Т.е. она берет из поля с длинным текстом только 255 символов?
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39415112
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если в таблице TSC поля X,Y сделать текстовые, и сделать вот такой код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub my()
Dim rs1 As Recordset, a
Dim rs2 As Recordset, b
Set rs1 = CurrentDb.OpenRecordset("CRMTSCF")
Set rs2 = CurrentDb.OpenRecordset("TSC")
a = Split(rs1!CS, ";")
For i = LBound(a) To UBound(a)
b = Split(a(i), ":")
rs2.AddNew
rs2.X = b(0)
rs2.Y = b(1)
rs2.Update
Next i
End Sub


Тоже выдает ту же ошибку.

А если прогнать значения массива 'a' и записать в тестовое поле таблицы, то ошибки нет. Но функция Split как буд-то берет максимум 255 символов для расщепления, вместо всего длинного текста. Как можно решить?
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39415113
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pnnkazan,
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39415115
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повнимательней с "." или "!" В RS ( элемент или свойство. Я удивлен как это VBA выполнил)
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39415116
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
удалите (закомментируйте) строку
Код: vbnet
1.
rs.MoveNext
...
Рейтинг: 0 / 0
Функция, запись данных из в поля формы в таблицу.
    #39415371
pnnkazan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, спасибо Вам очень большое. Я очень благодарен)
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Функция, запись данных из в поля формы в таблицу.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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