powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подскажите метод побыстрее
25 сообщений из 160, страница 3 из 7
Подскажите метод побыстрее
    #36638644
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
3.
Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH)" + _
 '"SELECT b.KOD,b.NAME,b.KOLVO" + _
 '"FROM dsh.dbf AS b LEFT JOIN ostatok.dbf AS a ON a.KOD=b.KOD" + _
 '"WHERE a.NAME IS NULL"
так должно быть это я по разному пробовал и забыл исправить
просто я в одной процедуре эти два фрагмента использовал, чтобы поочередно с каждого файла
добавлять значения , но запрос их в одну запись под разные поля не добавляет как на второй картинке,
а делает как на первой просто добавляя те же записи только в конец таблицы , поле KOD у них совпадает
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638830
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH)" + _
 '"SELECT b.KOD,b.NAME,b.KOLVO" + _
 '"FROM dsh.dbf AS b INNER JOIN ostatok.dbf AS a ON a.KOD=b.KOD"
Так будет правильнее
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638848
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
убираем комментарии, чтобы не засоряли мозг.
Получаем такую строку:

Код: plaintext
Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH)" 

Что вы этим хотите сказать? Это неправильный SQL-запрос.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638898
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
3.
Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH)" + _
 "SELECT b.KOD,b.NAME,b.KOLVO" + _
 "FROM dsh.dbf AS b LEFT JOIN ostatok.dbf AS a ON a.KOD=b.KOD" + _
 "WHERE a.NAME IS NULL"
запрос правильный,но если ставить задачу 20 файлов в один
чтобы строки не дублировались (в этом плане он не работает)
он копирует целиком таблицу из dsh.dbf и sklad.dbf в ostatok.dbf(получается 2 таблицы в одной
с большим количеством одинаковых строк), а хотелось чтобы дублей не было ,
а если использовать его с 20 файлами то получится 20 таблиц в одном файле с кучей одинаковых записей
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638907
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admон все позиции добавляет заново в конец таблицы
вместо такого вида
KOD NAME SKLAD DSH
123 но-шпа 150 200
получается так
KOD NAME SKLAD DSH
123 но-шпа 150
123 но-шпа 200
транспонирование таблицы ТОП №14 но всё зависит от базы данных, на чистом SQL такое не напишешь, а если и напишешь, то не универсально, зависит от данных.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638911
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
комментарии просто забыл убрать
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638938
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сделать так:
Код: plaintext
1.
2.
Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH)" + _
 "SELECT b.KOD,b.NAME,b.KOLVO" + _
 "FROM dsh.dbf AS b INNER JOIN ostatok.dbf AS a ON a.KOD=b.KOD" ORDER BY KOD,DSH
И на клиенте в цикле проверяем KOD если равен предыдущему значению, значит вписываем DSH в следующий столбец иначе в новую стороку запихиваем очередную номенклатуру
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638945
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMтранспонирование таблицы ТОП №14
Да тут все просто, тут просто автор что-то пытается наворотить, не анализируя мои примеры и не вникая, как они работают.

aduka05admкомментарии просто забыл убрать
Дайте:
1) Код в том виде, в каком он есть, без всяких ЗАБЫЛ, мне еще не хватало думать, что вы там забыли, а что так и должно быть
2) ТЗ - что этот код должен сделать
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638947
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaM,
надо создавать таблицу для дубликатов , выгружать туда все и удалять повторяющиеся строки?
если так то он скорее всего удалить строки где проставлены остатки товаров в филиалах,
и останется в конце концов та таблица которая была загружена первой
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638957
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admнадо создавать таблицу для дубликатов , выгружать туда все и удалять повторяющиеся строки?
если так то он скорее всего удалить строки где проставлены остатки товаров в филиалах,
и останется в конце концов та таблица которая была загружена первой

Я вам дал вчера два примера:
1) обновление количества для совпадающих строк
2) добавление несовпадающих строк

Чтобы все филиалы срослись между собой, надо сначала выполнить INSERT-
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638958
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...ы для всех филиалов, а потом UPDATE-ы для всех филиалов
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638961
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

Ты скажи что конкретно тебе нужно сделать-то? Если просумировать остатки, то это просто:
Код: plaintext
1.
2.
Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH)" + _
 "SELECT b.KOD,MAX(b.NAME),SUM(b.KOLVO)" + _
 "FROM dsh.dbf AS b INNER JOIN ostatok.dbf AS a ON a.KOD=b.KOD" GROUP BY KOD
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638971
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
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.
Private Sub Command1_Click()

 If PathFileExists("C:\ostatok2\dsh.DBF") =  1  Then

  Dim Conn As New ADODB.Connection
  Conn.Open "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir =C:\ostatok2\"
  Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH)" + _
  "SELECT b.KOD,b.NAME,b.KOLVO " + _
  "FROM dsh.dbf AS b LEFT JOIN ostatok.dbf AS a ON a.KOD=b.KOD" + _
  "WHERE a.NAME IS NULL"
  Conn.Close
  Set Conn = Nothing
 End If

 If PathFileExists("C:\ostatok2\sklad.DBF") =  1  Then

  Dim Conn As New ADODB.Connection
  Conn.Open "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir =C:\ostatok2\"
  Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,KOLVO)" + _
  "SELECT b.KOD,b.NAME,b.KOLVO " + _
  "FROM sklad.dbf AS b LEFT JOIN ostatok.dbf AS a ON a.KOD=b.KOD " + _
  "WHERE a.NAME IS NULL "
  Conn.Close

  Set Conn = Nothing
 End If
End Sub

здесь вы неправы , я пытаюсь вникнуть и объяснить то что получается и что я хочу получить
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638974
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
  Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH)" + _
  "SELECT b.KOD,b.NAME,b.KOLVO " + _
  "FROM dsh.dbf AS b LEFT JOIN ostatok.dbf AS a ON a.KOD=b.KOD" + _
  "WHERE a.NAME IS NULL"

Этот код неверный, потому что нет пробелов между WHERE и KOD и перед SELECT-ом
Исправляйте, пробуйте, выкладывайте, смотрим дальше
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638975
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
щас попробую так, видимо не так понял
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638990
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

Вы вот это обсуждаете? авторЗадача состоит в том чтобы вывести схожие позиции
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638991
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

а вот эти команды дублировать необязательно и даже нежелательно, сделайте так:

Код: plaintext
1.
2.
3.
4.
5.
6.
  Dim Conn As New ADODB.Connection
  Conn.Open "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir =C:\ostatok2\"

  'все операции с базой.

  Conn.Close
  Set Conn = Nothing
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639002
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Код: plaintext
1.
2.
3.
  Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH)" + _
  "SELECT b.KOD,b.NAME,b.KOLVO " + _
  "FROM dsh.dbf AS b LEFT JOIN ostatok.dbf AS a ON a.KOD=b.KOD" + _
  "WHERE a.NAME IS NULL"

Этот код неверный, потому что нет пробелов между WHERE и KOD и перед SELECT-ом
Исправляйте, пробуйте, выкладывайте, смотрим дальше
исправил и получается так
авторон все позиции добавляет заново в конец таблицы
вместо такого вида
KOD NAME SKLAD DSH
123 но-шпа 150 200
получается так
KOD NAME SKLAD DSH
123 но-шпа 150
123 но-шпа 200
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639019
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaM,
нет надо объединить 20 файлов в один по полю KOD (alieva.dbf ,dsh.dbf , sklad.dbf и т.д в один файл
ostatok.dbf)
чтобы был такой вид
KOD NAME SKLAD DSH ALIEVA
123 но-шпа 150 200 120
а получается такой
KOD NAME SKLAD DSH ALIEVA
123 но-шпа 150
123 но-шпа 200
123 но-шпа 300
в разных строках схожие позиции
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639039
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admнет надо объединить 20 файлов в один по полю KOD (alieva.dbf ,dsh.dbf , sklad.dbf и т.д в один файл

Ну, в принципе, можно попробовать сделать тогда просто через UNION все таблицы с группировкой
(ща нарисую)
Я вот только боюсь особенностей dbase - в предыдущем моем примере "WHERE a.NAME IS NULL", которое спокойно работает в MSSQL, в dbase надо записать, видимо, по-другому.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639044
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proaduka05admнет надо объединить 20 файлов в один по полю KOD (alieva.dbf ,dsh.dbf , sklad.dbf и т.д в один файл

Ну, в принципе, можно попробовать сделать тогда просто через UNION все таблицы с группировкой
(ща нарисую)
Я вот только боюсь особенностей dbase - в предыдущем моем примере "WHERE a.NAME IS NULL", которое спокойно работает в MSSQL, в dbase надо записать, видимо, по-другому.
наконец то у меня получилось объяснить))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639065
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT KOD, Min(NAME), Sum(DSH), Sum(ALIEVA), Sum(SKLAD) FROM
(
SELECT KOD, NAME, KOLVO AS DSH,  0  AS ALIEVA,  0  AS SKLAD FROM alieva.dbf
UNION ALL
SELECT KOD, NAME,  0  AS DSH, KOLVO AS ALIEVA,  0  AS SKLAD FROM dsh.dbf
UNION ALL
SELECT KOD, NAME,  0  AS DSH,  0  AS ALIEVA, KOLVO AS SKLAD FROM sklad.dbf
) AS T
GROUP BY KOD

Попробуйте (это не код для обновления, это запрос для получения сводной информации)
Выведите в сетку, посмотрите, то ли это, что вам нужно
(надеюсь, этот синтаксис поддержит dBase)
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639074
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro[quot aduka05adm]Я вот только боюсь особенностей dbase - в предыдущем моем примере "WHERE a.NAME IS NULL", которое спокойно работает в MSSQL, в dbase надо записать, видимо, по-другому.
Скорее всего нужно писать как FoxPro
Код: plaintext
IsNull(a.NAME)
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639077
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT KOD, Min(NAME), Sum(DSH), Sum(ALIEVA), Sum(SKLAD) FROM
(
SELECT KOD, NAME, KOLVO AS DSH,  0  AS ALIEVA,  0  AS SKLAD FROM alieva.dbf
UNION ALL
SELECT KOD, NAME,  0  AS DSH, KOLVO AS ALIEVA,  0  AS SKLAD FROM dsh.dbf
UNION ALL
SELECT KOD, NAME,  0  AS DSH,  0  AS ALIEVA, KOLVO AS SKLAD FROM sklad.dbf
) AS T
GROUP BY KOD
Это то, что нужно
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639082
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMЭто то, что нужно

Главное, чтобы dBase понял
...
Рейтинг: 0 / 0
25 сообщений из 160, страница 3 из 7
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подскажите метод побыстрее
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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