|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
Добрый день уважаемые форумчане, прошу помощи. Пытаюсь сделать автоматический импорт данных из эксель в аксес. Импортирую данный в таблицу аксес функцией Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Получаю таблицу "ImportExcelData_Temp" SAMOSTCODE MOANDATE PAR0101 PAR0102S-QLT-001 19.03.2020772 123S-QLT-002 22.03.2020 0.54S-QLT-003 16.03.2020 465S-QLT-004 08.01.202045S-QLT-005 15.05.202034 897S-QLT-006 14.11.2019 S-QLT-006 16.05.202014 13 далее мне нужно эти данные распределить по таблицам: Таблица1 и Таблица2 как показано в примере ниже Таблица1 Code sample SAMOSTCODE MOANDATE35 S-QLT-001 19.03.202036 S-QLT-002 22.03.202037 S-QLT-003 16.03.202038 S-QLT-004 08.01.202039 S-QLT-005 15.05.202040 S-QLT-006 14.11.201941 S-QLT-006 16.05.2020 Таблица2 Code sample MOANVALUE MOANDATE PARCODE 35 772 19.03.2020 PAR0101 35 123 19.03.2020 PAR0102 36 22.03.2020 PAR0101 36 0.54 22.03.2020 PAR0102 37 16.03.2020 PAR0101 37 465 16.03.2020 PAR0102 Поле код "Code sample" добавляется вручную(типа поле счетчик) при вводе данных через форму в БД, это не было проблемой раньше когда данных было не много и можно было их вручную быстро ввести, теперь данных стало больше, поэтому удобнее будет сделать это автоматически. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2020, 17:44 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
На листе значения в SAMOSTCODE уникальны? Что уникально в Таблица1? SAMOSTCODE, или SAMOSTCODE в паре с MOANDATE, или ничего? Эта уникальность подкреплена индексом? А в Таблица1 записи всегда добавляются или такие же могут уже существовать? Колонки PAR0101 и PAR0102 - так всегда, или может быть разное количество и с другими именами? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 17:41 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, Прикрепил кусок БД, надеюсь так будет проще понять суть моей проблемы. авторНа листе значения в SAMOSTCODE уникальны? Они уникальны вместе с MOANDATE также как и в Таблице1 (в БД это T_MOSAMPLE), Таблица2 (в БД это T_MOANAL) авторА в Таблица1 записи всегда добавляются или такие же могут уже существовать? Записи всегда добавляются, авторКолонки PAR0101 и PAR0102 - так всегда, или может быть разное количество и с другими именами? Да, разное количество и с другими именами. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:16 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:18 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
Если предположить, что Code sample - это автоинкремент в Таблица1, то сначала Код: sql 1. 2. 3.
а потом для каждого поля со значениями (или длинный UNION в SELECT-части) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 12:15 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
Я бы делал так (без временной таблицы), объявление переменных опускаю: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
Если этот код выполнять в транзакции, то будут и надежнее, и быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 18:30 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, Спасибо за отклик. Немного подправил под себя, Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
работает на половину т.е. в Таблицу1(она же T_MOSAMPLE) добавляет все отлично, а вот в Таблицу2 ( она же T_MOANAL) безрезультатно авторВ T2 поле "Code sample" должно быть типа "Длинное целое" В бд это поле имеет текстовое значение, хотя изменение в числовое ничего не дало ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 23:38 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
Без крякозябров) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2020, 12:51 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
WalkManX а вот в Таблицу2 ( она же T_MOANAL) безрезультатно авторВ T2 поле "Code sample" должно быть типа "Длинное целое" В бд это поле имеет текстовое значение, хотя изменение в числовое ничего не дало Код: vbnet 1. 2. 3. 4.
Добавьте выделенное (на коленке писал, забыл) А поле в Т2 должно быть не только числовым, а в схеме данных должна быть создана связь с сохранением целостности данных. Еще раз - рекомендую использовать транзакцию, тогда импорт будет выполнен иолностью, или, при ошибке, отменен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2020, 14:55 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
Кривцов Анатолий WalkManX а вот в Таблицу2 ( она же T_MOANAL) безрезультатно пропущено... В бд это поле имеет текстовое значение, хотя изменение в числовое ничего не дало Код: vbnet 1. 2. 3. 4.
Добавьте выделенное (на коленке писал, забыл) А поле в Т2 должно быть не только числовым, а в схеме данных должна быть создана связь с сохранением целостности данных. Еще раз - рекомендую использовать транзакцию, тогда импорт будет выполнен иолностью, или, при ошибке, отменен. Спасибо вам огромное, вы мне очень помогли, как вы и рекомендовали, погуглив что такое транзакция, сделал через транзакцию добавление данных и добавил некоторые изменения, теперь "Code sample" добавляется автоматически и не надо его в экселе редактировать в ручную. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71.
Теперь у меня появилась новая задача, написал функцию Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
она должна сравнивать записи двух таблиц и если записи совпадают, присвоить функции значение "LOD", но VBA ругается на "ElseIf rs1!" , мой уровень аксеса не позволяет самому разобраться, не судите строго) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2020, 13:43 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
WalkManX Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
А при появлении ошибки изменения не будут отменены. Добавьте отмеченные строки. WalkManX Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Если там имя поля, то конструкция должна быть такой: Код: vbnet 1. 2.
Но судя по тому, что strPARAM участвует в WHERE запросов, то там значение. Ждем объяснений... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2020, 16:54 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, авторДобавьте отмеченные строки.Еще раз спасибо, исправил. авторНо судя по тому, что strPARAM участвует в WHERE запросов, то там значение. Да, все верно это значение. PARCode valuePAR0101 2PAR0101 7PAR0102 5PAR0104 2PAR0101 3PAR0102 2 В этой таблице PARCode уникален PARCode valuePAR0101 2PAR0102 PAR0103 PAR0104 2 Нужный результат PARCode value zLODPAR0101 2LODPAR0101 7PAR0102 5PAR0104 2LODPAR0101 3PAR0102 2 Т.Е. если значения поля Value в таблицах совпадают, то функция возвращает результат "LOD", если нет то Null ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2020, 17:22 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
Если задача - найти значение из strPARAM в обеих таблицах (с учетом Null в поле "zLimit"), то это можно решить проще: Код: vbnet 1. 2. 3. 4. 5.
Какой тип полей "MOPACODE" и "ANMOPACODE"? Если числовой, то апострофы в условии не нужны, т.е.: Dlookup("[zLimit]","[T_MOParam]","[MOPACODE]=' & strPARAM) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 12:15 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, авторКакой тип полей "MOPACODE" и "ANMOPACODE"? Тип полей текстовый, "MOPACODE" и "ANMOPACODE" авторЕсли задача - найти значение из strPARAM в обеих таблицах Задача не просто найти значения в обеих таблицах, а сравнить их и в случаи если значения совпадают вернуть "LOD" ваш пример возвращает "LOD" просто если в "zLimit" есть значения приведу пример работы функции tab1 MOPACODEvalue PAR0101 2 tab2 ANMOPACODEzvaluePAR0101 2 сравниваем значения поля "value" и "zValue" в обеих таблицах, совпадает- функция возвращает "LOD", во всех остальных случаях функция должна возвращать "null", даже если в поле "zValue" нет значения ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2020, 14:28 |
|
Импорт данных из Эксель в две связанные таблицы
|
|||
---|---|---|---|
#18+
Кривцов Анатолий, На основе вашего совета удалось добится нужного результата. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Спасибо вам огромное, здоровье и благополучие. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2020, 14:04 |
|
|
start [/forum/topic.php?fid=45&msg=39939478&tid=1610165]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
148ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 338ms |
total: | 579ms |
0 / 0 |