powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подскажите метод побыстрее
160 сообщений из 160, показаны все 7 страниц
Подскажите метод побыстрее
    #36637579
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
If PathFileExists("C:\ostatok2\dsh.DBF") =  1  Then
 Adodc2.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir =      C:\ostatok2\"
 Adodc2.CommandType = adCmdText
 Adodc2.RecordSource = "SELECT * FROM dsh.DBF"
 Set TDataLite2.DataSource = Adodc2
 Adodc2.Refresh
 TDataLite2.Refresh
 ad1 = Me.Adodc1.Recordset.RecordCount
 ad2 = Me.Adodc2.Recordset.RecordCount
 nom =  0 
  For i =  0  To ad2
  Me.Adodc1.Recordset.MoveFirst
  If Me.Adodc2.Recordset.EOF = False Then

  namefilt1 = Me.Adodc1.Recordset("KOD").Value
  namefilt1name = Me.Adodc1.Recordset("NAME").Value
  namefilt1name2 = Me.Adodc2.Recordset("NAME").Value
  namefilt2 = Me.Adodc2.Recordset("KOD").Value
  namefilt1kol2 = Me.Adodc2.Recordset("KOLVO").Value
  Me.Adodc1.Recordset.Find "KOD =" + namefilt2
   If Adodc1.Recordset.EOF Then
   Me.Adodc1.Recordset.AddNew
   Me.Adodc1.Recordset!KOD = namefilt2
   Me.Adodc1.Recordset!Name = namefilt1name2
   Me.Adodc1.Recordset!DSH = namefilt1kol2
   'Me.Adodc1.Recordset.Update
   nom = nom +  1 
   Else
   Me.Adodc1.Recordset("DSH").Value = namefilt1kol2
   'Me.Adodc1.Recordset.Update
   nom = nom +  1 
   End If
 
  End If
 Me.Adodc2.Recordset.MoveNext
 Next i
Adodc1.Refresh
TDataLite1.Refresh
mes2 = MsgBox(mes1, vbOKOnly)
End If
Если ли метод побыстрее , а то у меня файлов(dbf) где то 20 штук , очень долго получается
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637598
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/topic/759003&hl=#8781417



все-таки теперь хотите быстрый?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637607
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro/topic/759003&hl=#8781417



все-таки теперь хотите быстрый?

для той программы тот метод был в самый раз , а здесь он ну слишком долгий)))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637613
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
здесь задача такая,выгружаются остатки с 20 филиалов, нужно их в один файл(dbf) загнать,
в каждом файле около 5000 строк, а в той программе всего 1000 строк и всего 2 файла)))))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637643
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
здесь задача такая,выгружаются остатки с 20 филиалов, нужно их в один файл(dbf) загнать,
в каждом файле около 5000 строк, а в той программе всего 1000 строк и всего 2 файла)))))

Ну можно сделать с помощью метода двух курсоров, это ускорит обработку на один-два порядка.

Но все же я вам опять рекомендую делать запрос из двух файлов вместо того, чтобы лопатить это на клиенте. Как сделать запрос из таблиц, находящихся в разных файлах в dBase - я не знаю.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637653
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
а если через INSERT(sql) делать с условием Where?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637662
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admа если через INSERT(sql) делать с условием Where?

Делать ЧТО?
У вас данные в разных базах.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637670
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
вставить данные из dsh.dbf в ostatok.dbf (where ostatok.KOD=DSH.KOD)
я просто не совсем понимаю как это работает поэтому спрашиваю,
я пробовал так но у меня вместо объединения по коду , записи добавлялись
в конце файла , то есть вся таблица вставлялась заново , хотя записи с таким кодом уже были
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637681
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так.
Мне это напоминает старый одесский прикол - подходите к человеку на улице и спрашиваете:
"Простите, вы мне не подскажете, правильно ли я иду?"

Так и вы. Опубликовали какой-то код, теперь рассказываете, что он как-то не так работает. А откуда мы знаем, как правильно он должен работать???

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

ТЗ на этот код.
Внятное, подробное.
Мне лень заниматься реверс-инжинирингом.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637750
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
3.
Adodc1.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir = C:\ostatok2\"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "INSERT INTO ostatok(KOD,NAME,DSH) SELECT dsh.KOD,dsh.NAME,dsh.KOLVO " + _
"FROM dsh where ostatok.KOD=dsh.KOD"
так вот в чем проблема ? выходит ошибка "Слишком мало параметров требуется один"
если условие
Код: plaintext
where ostatok.KOD=dsh.KOD
не ставить то естественно он просто
добавляет записи в конец таблицы
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637757
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На какой строке? (не на этих уж точно)
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637792
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНа какой строке? (не на этих уж точно)
не понял вопроса
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637794
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы написали, что выходит ошибка. Но она возникает не на тех строках, которые вы привели, это точно.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637804
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProВы написали, что выходит ошибка. Но она возникает не на тех строках, которые вы привели, это точно.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637806
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
On Error GoTo ado1
If PathFileExists("C:\ostatok2\dsh.DBF") =  1  Then

 Adodc1.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir = C:\ostatok2\"
 Adodc1.CommandType = adCmdText
 Adodc1.RecordSource = "INSERT INTO ostatok(KOD,NAME,DSH) SELECT dsh.KOD,dsh.NAME,dsh.KOLVO " + _
 "FROM dsh where ostatok.KOD=dsh.KOD"
 Set TDataLite2.DataSource = Adodc2
 Adodc1.Refresh
 TDataLite1.Refresh
End If
больше в процедуре нет кода
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637807
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы хотите вывести в грид результат выполнения команды INSERT???????
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637813
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
в грид необязательно , главное чтобы файлы объединились по полю KOD
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637825
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admв грид необязательно
Тогда вот это что означает:
Код: plaintext
TDataLite1.Refresh


И еще, чтобы выяснить, на какой строке ошибка, уберите обработчик (On Error), при возникновении ошибки нажмите кнопку Debug.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637829
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
авторTDataLite1.Refresh

это я использую TrueDbGRID
вместе с ним идет TdataLite через него фильтровать лучше и ошибок меньше
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637830
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
Adodc1.Refresh
ошибка на этом этапе
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637838
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

Код: plaintext
1.
2.
3.
4.
5.
Dim Conn As New ADODB.Connection
Conn.Open "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir = C:\ostatok2\"
Conn.Execute "INSERT INTO ostatok(KOD,NAME,DSH) SELECT dsh.KOD,dsh.NAME,dsh.KOLVO " + _
 "FROM dsh where ostatok.KOD=dsh.KOD"
Conn.Close
Set Conn = Nothing


И не морочьте голову селёдкеADODC-у, TrueDbGRID-у и TdataLite-у.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637842
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
Conn.Execute "INSERT INTO ostatok(KOD,NAME,DSH) SELECT dsh.KOD,dsh.NAME,dsh.KOLVO " + _
 "FROM dsh where ostatok.KOD=dsh.KOD"
на этом этапе ошибка
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637847
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
Код: plaintext
1.
Conn.Execute "INSERT INTO ostatok(KOD,NAME,DSH) SELECT dsh.KOD,dsh.NAME,dsh.KOLVO " + _
 "FROM dsh where ostatok.KOD=dsh.KOD"
на этом этапе ошибка

Ок.
Стало быть, запрос неправильно написан с точки зрения dBase (хотя вроде обычный SQL, где тут ошибаться...)
Возможно ostatok или dsh - это не таблица, а параметрическое представление, поэтому и требует себе какой-то параметр, но структуру вашей базы я не знаю, да и в dBase, как уже говорил, ни бумбум
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637849
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
спасибо большое поищу инфу про dBASE
благодарю за терпение
просто это первый форум где задаю вопросы
поэтому формулирую видимо неправильно)
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637853
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КАТЕГОРИЧЕСКИ рекомендую прочесть три раза и вникнуть.
Ибо пособие написано кровьюна основе многолетнего опыта
http://www.rsdn.ru/Info/howtoask.xml
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36637860
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
так и сделаю))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638027
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH) SELECT b.KOD,b.NAME,b.KOLVO " + _
 "FROM dsh.dbf as b ,ostatok.dbf as a " + _
 "where a.KOD=b.KOD"
так заработало (взято с http://www.sql.ru/forum/actualthread.aspx?tid=581972 ), но почему то не работает условие
Код: plaintext
"where a.KOD=b.KOD"
вместо того чтобы заменять данные в поле DSH
запрос просто добавляет все записи из второй таблицы в первую
то есть даже не заменяя схожие значения, а просто из одной таблицы делает 2
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638033
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто вам сказал, что INSERT должен заменять????
Почитайте основы SQL. Заменяет UPDATE.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638040
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
можете подсказать , а то щас рыться лень
тогда и смысла нету в этом условии
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638051
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
можете подсказать , а то щас рыться лень
тогда и смысла нету в этом условии

А что подсказать-то?
Вторую страницу прошу ТЗ - нету!
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638055
Shocker.Pro,
авторТЗ-это что?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638058
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm@gmail.comShocker.Pro,
авторТЗ-это что?

Ёмоё
Яндекс на что придумали (если уж не знаете)
http://yandex.ru/yandsearch?clid=9582&text=%D0%A2%D0%97&lr=213
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638065
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
то есть описать то что я хочу получить?))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638068
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
то есть описать то что я хочу получить?))

И то, ИЗ чего вы хотите получить. И какие сопутствующие условия этого получения.

Вообще, чтоб вы понимали, что требуется: хорошо проработанное ТЗ - половина (а чаще и больше) выполненной работы . Я запрос вам за пять минут нарисую (люблю SQL), но если мне не придется клещами из вас вытаскивать часами информацию, вам же это надо, не мне.

(прочли ссылку мою? там это очень хорошо расписано)
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638075
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Задача состоит в следующем , выгружаются остатки из 1с в dbf ,
всего файлов 20 из 20 филиалов , в файле ostatok.dbf есть поля (KOD,NAME и названия филиалов)
в файлах которые присылаются с филиалов поля(KOD и NAME)с файлом ostatok.dbf одинаковы
единственно в них есть поле KOLVO(количсетво), так вот надо все эти файлы объединить в один
(ostatok.dbf) по полю KOD , а поля KOLVO разместить по полям филиалов в ostatok.dbf
поэтому и использовал INSERT с условием where ostatok.KOD=dsh.KOD(это файл филиала) ,
думал он будет объединять их по полю и заполнять поле Филиала Количеством
\/вот код \/
Код: plaintext
1.
2.
Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH) SELECT b.KOD,b.NAME,b.KOLVO " + _
 "FROM dsh.dbf as b ,ostatok.dbf as a " + _
 "where a.KOD=b.KOD"
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638079
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
автор(прочли ссылку мою? там это очень хорошо расписано)
не успел , но прочту обязательно , самому неудобно становится задавать дурные вопросы
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638083
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
также может быть такое что в файле ostatok.dbf не будет схожих записей
с файлами с филиалов , поэтому надо чтобы те записи которых нет тоже добавлялись в ostatok.dbf
по полям KOD NAME и поле Филиала(KOLVO-количество с файла который прислали)
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638088
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, учиться вам еще и учиться писать ТЗ.
Ну сами перечиайте и подумайте, может ли посторонний человек его понять.
Я только после десятого прочтения и основываясь на предыдущем опыте вроде разобрался...

Код: plaintext
1.
UPDATE ostatok.dbf SET DSH=b.KOLVO
FROM ostatok.dbf AS a INNER JOIN dsh.dbf AS b ON a.KOD=b.KOD
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638093
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
хороший вы человек))
но я так понял что если записей схожих нет то они не попадут из файла dsh.dbf в ostatok.dbf?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638094
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
также может быть такое что в файле ostatok.dbf не будет схожих записей
с файлами с филиалов , поэтому надо чтобы те записи которых нет тоже добавлялись в ostatok.dbf
по полям KOD NAME и поле Филиала(KOLVO-количество с файла который прислали)

Код: plaintext
1.
2.
3.
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
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638099
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
выдает ошибку
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638102
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
сработало Спасибо вам большое)))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638561
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
когда используешь запрос для файла dsh.dbf то все нормально
Код: plaintext
1.
2.
3.
4.
Conn.Execute "INSERT INTO ostatok.dbf(KOD,NAME,DSH)" + _
'"SELECT b.KOD,b.NAME,b.KOLVO,c.KOLVO " + _
'"FROM dsh.dbf AS b LEFT JOIN ostatok.dbf AS a ON a.KOD=b.KOD" + _
'"WHERE a.NAME IS NULL"
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638570
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
но если использовать этот запрос для нескольких файлов (допустим dsh.dbf и sklad.dbf)
dsh.dbf
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
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,c.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
ostatok.dbf
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
If PathFileExists("C:\ostatok2\sklad.DBF") =  1  Then
 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
и это все в одной процедуре то получается такая картина
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638589
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
он все позиции добавляет заново в конец таблицы
вместо такого вида
KOD NAME SKLAD DSH
123 но-шпа 150 200
получается так
KOD NAME SKLAD DSH
123 но-шпа 150
123 но-шпа 200
ниже рисунок как должно получаться
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638600
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Со вторым фрагментом все понятно - это мой код.
А что это такое???

Код: plaintext
1.
2.
3.
4.
5.
6.
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)"
 Conn.Close
 Set Conn = Nothing
End If

Вы же опять ТЗ на этот фрагмент не написали, хотите, чтобы я это расшифровал? Не расшифрую, это нерабочий фрагмент кода.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638609
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
KOD NAME SKLAD DSH
 123  но-шпа   150  
 123  но-шпа       200 
получается так , а должно быть так
Код: plaintext
1.
KOD NAME SKLAD DSH
 123  но-шпа   150   200 
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36638640
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admполучается так , а должно быть так

Получается в результате ЧЕГО? Нерабочего фрагмента кода, который вы опубликовали или чего?
Если вы сначала сделаете все UPDATE, а потом все INSERT-ы - это одно, если чередуя - другое.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #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
Подскажите метод побыстрее
    #36639089
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMСкорее всего нужно писать как FoxPro
Код: plaintext
IsNull(a.NAME)


Автор. Меня смущает то, что вам не выдается ошибок на неверный синтаксис (в т.ч. в случае с WHERE склеенным). Может у вас там On Error Resume Next где-нить стоит????
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639095
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Можно работать через драйвер FoxPro, там есть ограничение на длину SQL. Но можно понасоздавать курсоров которые потом можно соединять, т.к. курсоры глобальны. И вообще эта задача для FoxPro.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639133
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
вот код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Adodc1.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir = C:\ostatok2\"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "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"
Set TDataLite1.DataSource = Adodc1
Set TDBGrid1.DataSource = TDataLite1
Adodc1.Refresh
TDataLite1.Refresh
а вот результат
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639137
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admа вот результат

Надо тогда дать правильные имена полей в строке
Код: plaintext
Adodc1.RecordSource = "SELECT KOD, Min(NAME), Sum(DSH), Sum(ALIEVA), Sum(SKLAD) FROM " + _

Я не знаю, как вы там привязываетесь к столбцам сетки, но видимо типа того:
Код: plaintext
1.
Adodc1.RecordSource = "SELECT KOD, Min(NAME) AS NAME, Sum(DSH) AS DSH, Sum(ALIEVA) AS ALIEVA, Sum(SKLAD) AS SKLAD FROM " + _
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639184
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
все получилось спасибо вам)))
а как это в файл записать?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639196
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

Судя по всему FoxPro балуетесь...

File\Export...
В Type выберите FoxPro 2.x (DBF)
В То куда хотите сохранить и наберите имя файла + .dbf
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639202
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admа как это в файл записать?

Код: plaintext
1.
2.
DELETE FROM ostatok.dbf 
INSERT INTO ostatok.dbf (перечень полей....)
SELECT ... далее мой код
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639220
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaM,
visual basic
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36639222
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
еще раз спасибо
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36642881
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
можете разъяснить выделенные строки
Код: plaintext
SELECT KOD, Min(NAME), Sum(DSH), Sum(ALIEVA), Sum(SKLAD) FROM
Код: plaintext
1.
2.
(
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
Код: plaintext
1.
) AS T
GROUP BY KOD
group by - это видимо чтобы дубли убрать?
а как мне их упорядочить по полю NAME ?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36642907
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь два запроса в одном (т.н. вложенные запросы).

Внутренний запрос начинается открывающейся скобкой и заканчивается ") AS T". Таким образом, с точки зрения внешнего запроса он не отличается от просто таблицы с названием Т - можно было писать для наглядности Min(T.Name), Sum(T.DSH) и т.п.

Внутренний запрос объединяет несколько запросов друг за другом с помощью UNION ALL. Запросы могут быть объединены только при условии, что у них абсолютно одинаковый набор полей, как по типу, так и по количеству и последовательности. Поэтому мы имеем "0 AS ALIEVA" и т.п., чтобы зарезервировать место для полей.
В результате мы имеем сборник всех ваших 20ти таблиц.

Внешний запрос (который, напоминаю, рассматривает внутренний как таблицу) просто выбирает поля из нее, но он объединяет строки с одинаковым кодом в одну строку (GROUP BY KOD). Таким образом у вас получится столько строк, сколько уникальных кодов у вас есть во всех таблицах.

При объединении строк, поля, которые не вошли в объединение, должы обязательно очевидно агрегироваться какой-то агрегатной функцией, потому что в результате запроса должно получиться одно значение, а не куча. В случае с количеством - это функция Sum, оно и понятно. Нулевые значения не повлияют на сумму (можно было бы с тем же успехом использовать и NULL).

Поле NAME теоретически тоже должно было попасть в GROUP. Однако, я не знаю, насколько у вас там строго, вдруг какой-то филиал поправит наименование. Тогда получится две строки с одинаковым кодом и разным наименованием. Поэтому на всякий случай, я из наименований выбираю одно, в данном случае минимальное (с точки зрения сравненя строк).

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

У вас нет NAME.

Поэтому либо вы пишете первую строку по моему первому варианту:
SELECT... Min(NAME) AS NAME
и в самом конце запроса добавляете
ORDER BY NAME

либо, если не менять первую строку, пишете в самом конце
ORDER BY Min(NAME)

я бы посоветовал первый вариант, ибо фиг знает, как там сработает оптимизатор, чтобы быть уверенным, что Min не будет высчитываться два раза.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36642915
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
спасибо,теперь есть ясность.ниже то что получилось
Код: plaintext
1.
2.
3.
4.
5.
6.
strsql = "INSERT INTO ostatok.dbf (KOD,NAME,DSH,ALIEVA,SKLAD,KALIN18,YARAG,GAMZATOVA,KIROVA,GAGARINA, "
strsql = strsql + "APTEKA29,LENINA104,LEKAR,MELOCH,YNIVER,REDUCTOR,PIROGOV,CB,KASPIY,NOVPOS,DOVERIE,UZBEK,KAL5KA,HAS,BUINAKSK,DERBENT) "
strsql = strsql + "SELECT KOD, Min(NAME), Sum(DSH), Sum(ALIEVA),Sum(SKLAD),Sum(KALIN18)"
strsql = strsql + ",Sum(YARAG),Sum(GAMZATOVA),Sum(KIROVA),Sum(GAGARINA),Sum(APTEKA29),Sum(LENINA104),Sum(LEKAR) "
strsql = strsql + ",Sum(MELOCH),Sum(YNIVER),Sum(REDUCTOR),Sum(PIROGOV),Sum(CB),Sum(KASPIY),Sum(NOVPOS) "
strsql = strsql + ",Sum(DOVERIE),Sum(UZBEK),Sum(KAL5KA),Sum(HAS),Sum(BUINAKSK),Sum(DERBENT) From "
strsql = strsql + "( "
а это уже идет проверка файла , если есть то добавляется строка и так сделал с остальными 24 файлами
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
If PathFileExists("C:\ostatok2\dsh.DBF") =  1  Then
strsql = strsql + "SELECT KOD, NAME, KOLVO AS DSH, 0 AS ALIEVA,0 AS SKLAD,0 AS SOVET "
strsql = strsql + ",0 AS KALIN18,0 AS YARAG,0 AS GAMZATOVA,0 AS KIROVA,0 AS GAGARINA,0 AS APTEKA29,0 AS LENINA104 "
strsql = strsql + ",0 AS LEKAR,0 AS MELOCH,0 AS YNIVER,0 AS REDUCTOR,0 AS PIROGOV,0 AS CB "
strsql = strsql + ",0 AS KASPIY,0 AS NOVPOS,0 AS DOVERIE,0 AS UZBEK,0 AS KAL5KA,0 AS HAS,0 as BUINAKSK,0 AS DERBENT "
strsql = strsql + "FROM dsh.dbf "
strsql = strsql + "Union All "
End If
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36642945
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а теперь по-хорошему завести в базе таблицу со списком файлов и эти запросы не ручками формировать, а в цикле. Тогда при появлении нового филиала не нужно будет править и переустанавливать программу, достаточно будет внести новый филиал в таблицу филиалов.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36642948
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ: Особенно порадовал филиал UZBEK
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36642954
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admа как мне их упорядочить по полю NAME ?

Кстати. Раз у вас INSERT INTO, то упорядочивать этот SELECT абсолютно бессмысленно.
Упорядочивать надо выборку, которая идет в отображение.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36642990
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proaduka05admа как мне их упорядочить по полю NAME ?

Кстати. Раз у вас INSERT INTO, то упорядочивать этот SELECT абсолютно бессмысленно.
Упорядочивать надо выборку, которая идет в отображение.
то есть в самом ADO?
автора теперь по-хорошему завести в базе таблицу со списком файлов и эти запросы не ручками формировать, а в цикле. Тогда при появлении нового филиала не нужно будет править и переустанавливать программу, достаточно будет внести новый филиал в таблицу филиалов.
не совсем понимаю как это реализовать(можно по идее и через текстовый файл это сделать),
только как совместить sql и цикл в этой таблице с именами файлов филиалов
авторЗЫ: Особенно порадовал филиал UZBEK
Узбекгородок называется район где находится наш филиал)))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643012
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
то то по типу этого?код не проверял
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Open "c:\nastr.txt" For Input As # 1 
Do Until EOF( 1 ) 
Line Input # 1 , strsqltxt 
strsql = strsql + "INSERT INTO ostatok.dbf ("+strsql+",) "
strsql = strsql + "SELECT KOD, Min(NAME), "+"Sum("+strsql+")," +" "
strsql = strsql + "SELECT KOD, NAME, KOLVO AS "+strsql+","
strsql = strsql + "FROM "+strsq+l".dbf "
strsql = strsql + "Union All "
Loop 
Close # 1 
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643036
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
то то по типу этого?код не проверял
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Open "c:\nastr.txt" For Input As # 1 
Do Until EOF( 1 ) 
Line Input # 1 , strsqltxt 
strsql = strsql + "INSERT INTO ostatok.dbf ("+strsql+",) "
strsql = strsql + "SELECT KOD, Min(NAME), "+"Sum("+strsql+")," +" "
strsql = strsql + "SELECT KOD, NAME, KOLVO AS "+strsql+","
strsql = strsql + "FROM "+strsq+l".dbf "
strsql = strsql + "Union All "
Loop 
Close # 1 

то есть вот так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Open "c:\nastr.txt" For Input As # 1 
Do Until EOF( 1 ) 
Line Input # 1 , strsqltxt 
strsql = strsql + "INSERT INTO ostatok.dbf ("+strsqltxt+",) "
strsql = strsql + "SELECT KOD, Min(NAME), "+"Sum("+strsqltxt+")," +" "
strsql = strsql + "SELECT KOD, NAME, KOLVO AS "+strsqltxt+","
strsql = strsql + "FROM "+strsqltxt+".dbf "
strsql = strsql + "Union All "
Loop 
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643075
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admто есть в самом ADO?

Нет.
В том SELECT-е, который вы используете для отображения данных в сетке.

aduka05admто есть вот так

нет, я совершенно другое имел ввиду.
Есть таблица в БД (в той же, где вы собираете сводную информацию). В ней N строк, которые содержат имена файлов БД.

Устраиваете цикл от 1 до N, в котором конструируете в нескольких текстовых переменных фрагменты запроса. Отдельно строку SELECT-а внешнего запроса, отдельно набор склеенных внутренних и т.п. После цикла объединяете эти переменные в одну, с добавлением той информации, которая не изменялась и выполняете запрос.

Ну это по уму, а можно и оставить как есть.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643077
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proaduka05admа как мне их упорядочить по полю NAME ?

У вас нет NAME.

Поэтому либо вы пишете первую строку по моему первому варианту:
SELECT... Min(NAME) AS NAME
и в самом конце запроса добавляете
ORDER BY NAME

либо, если не менять первую строку, пишете в самом конце
ORDER BY Min(NAME)

я бы посоветовал первый вариант, ибо фиг знает, как там сработает оптимизатор, чтобы быть уверенным, что Min не будет высчитываться два раза.
первый вариант привел к циклической ошибке
а второй вариант создал в два раза больше записей
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643080
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proaduka05admто есть в самом ADO?

Нет.
В том SELECT-е, который вы используете для отображения данных в сетке.

aduka05admто есть вот так

нет, я совершенно другое имел ввиду.
Есть таблица в БД (в той же, где вы собираете сводную информацию). В ней N строк, которые содержат имена файлов БД.

Устраиваете цикл от 1 до N, в котором конструируете в нескольких текстовых переменных фрагменты запроса. Отдельно строку SELECT-а внешнего запроса, отдельно набор склеенных внутренних и т.п. После цикла объединяете эти переменные в одну, с добавлением той информации, которая не изменялась и выполняете запрос.

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

Не знаю, что у вас там за ошибки, но в любом случае, как я написал выше, ORDER BY в SELECT... INTO вам не нужен.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643140
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proaduka05admпервый вариант привел к циклической ошибке
а второй вариант создал в два раза больше записей

Не знаю, что у вас там за ошибки, но в любом случае, как я написал выше, ORDER BY в SELECT... INTO вам не нужен.
ок ) не так принципиально это на самом деле в данном случае
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643151
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы, видимо, допускаете классическую ошибку начинающего программиста БД.

Запомните. В таблице БД нет никакой последовательности хранения данных. Нельзя применять понятия "добавить в конец таблицы", "эта запись раньше, чем та" и т.п. Это не Эксель. Добавляемые записи физически кладутся куда попало, в зависимости от наличия свободного места.
Последовательность записей имеет место быть только когда вы делате ВЫБОРКУ с указанием СОРТИРОВКИ по опеределенному полю. Если сортировку не указать, записи будут выведены как попало, причем даже два раза подряд они могут быть выведены по-разному.

В конструкции INSERT INTO... SELECT сортировка не имеет ни малейшего смысла. Даже если вы отсуортируете записи перед вставкой, в таблице они будут все равно храниться как попало. И только указание сортировки при ВЫБОРКЕ данных из таблицы гарантирует вам определенную последовательность строк.

(Исключение - использование TOP и IDENTITY, но это пока мы не будем рассматривать)
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643258
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
точно подметили, я об этом не знал,
Код: plaintext
1.
Устраиваете цикл от  1  до N, в котором конструируете в нескольких текстовых переменных фрагменты запроса. Отдельно строку SELECT-а внешнего запроса, отдельно набор склеенных внутренних и т.п. После цикла объединяете эти переменные в одну, с добавлением той информации, которая не изменялась и выполняете запрос.

считав данные из таблицы с названиями филиалов и вставив в запрос , как я буду определять если
данный файл в наличии , для последующей его обработки или нет(НАПРИМЕР dsh.dbf ,sklad.dbf и т.д)?
просто что то не как соображу последовательность действий и как это реализовать
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643266
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admсчитав данные из таблицы с названиями филиалов и вставив в запрос , как я буду определять если данный файл в наличии , для последующей его обработки или нет(НАПРИМЕР dsh.dbf ,sklad.dbf и т.д)?

внутри цикла, так же, как и сейчас, только имя файла будет переменной.

aduka05admпросто что то не как соображу последовательность действий и как это реализовать

Тогда забейте.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643380
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
авторвнутри цикла, так же, как и сейчас, только имя файла будет переменной
буду пробовать может че интересное получится
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643489
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Open "C:\ostatok2\nastr1.txt" For Input As # 1 
Do Until EOF( 1 )
Line Input # 1 , strtxt
strtemp = "," + strtxt
strtemp2 = ", Sum(" + strtxt + ")"
strsql = strsql + strtemp
strsql2 = strsql2 + strtemp2
Loop
Close # 1 
strsqlfull = " INSERT INTO ostatok.dbf (KOD,NAME" + strsql + ") "
strsqlfull2 = " SELECT KOD, Min(NAME)" + strsql2 + " From ("
все нормально , но проблема с кодом который ниже
Код: plaintext
1.
2.
3.
4.
"SELECT KOD, NAME, KOLVO AS DSH, 0 AS ALIEVA,0 AS SKLAD,0 AS SOVET "
",0 AS KALIN18,0 AS YARAG,0 AS GAMZATOVA,0 AS KIROVA,0 AS GAGARINA,0 AS APTEKA29,0 AS LENINA104 "
",0 AS LEKAR,0 AS MELOCH,0 AS YNIVER,0 AS REDUCTOR,0 AS PIROGOV,0 AS CB "
",0 AS KASPIY,0 AS NOVPOS,0 AS DOVERIE,0 AS UZBEK,0 AS KAL5KA,0 AS HAS,0 as BUINAKSK,0 AS DERBENT " 
как мне в цикле сделать чтобы после первой строки(допустим DSH) , KOLVO перешло на ALIEVA
,ладно если еще точно знать те строки которые я вбил , а если я добавлю нового контрагента как сделать Чтобы KOLVO было в нужной части да еще во всех остальных нули стояли
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643500
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не вижу второго цикла, который склеивает внутренний запрос через Union All
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643513
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
его то сделать можно
а как решить эту проблему
Код: plaintext
1.
SELECT KOD, NAME, KOLVO AS DSH,  0  AS ALIEVA, 0  AS SKLAD, 0  AS SOVET "
", 0  AS KALIN18, 0  AS YARAG, 0  AS GAMZATOVA, 0  AS KIROVA, 0  AS GAGARINA, 0  AS APTEKA29, 0  AS LENINA104
не поймет же обработка что надо KOLVO вставить там где надо и 0 там где надо, вообще если не использовать эту часть
Код: plaintext
1.
2.
 0  AS ALIEVA, 0  AS SKLAD, 0  AS SOVET 
, 0  AS KALIN18, 0  AS YARAG, 0  AS GAMZATOVA, 0  AS KIROVA, 0  AS GAGARINA, 0  AS APTEKA29, 0  AS LENINA104
запрос не будет работать?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643516
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала цикл сделайте. А проблема будет решаться внутри цикла. Если в процессе не сообразите - подскажу.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643533
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
strplusstroka = "Union All "
strsql3 = strsql3 + "SELECT KOD, NAME, 0 AS DSH, 0 AS ALIEVA,0 AS SKLAD,0 AS SOVET "
strsql3 = strsql3 + ",0 AS KALIN18,0 AS YARAG,0 AS GAMZATOVA,0 AS KIROVA,0 AS GAGARINA,0 AS APTEKA29,0 AS LENINA104 "
strsql3 = strsql3 + ",0 AS LEKAR,0 AS MELOCH,0 AS YNIVER,0 AS REDUCTOR,0 AS PIROGOV,0 AS CB "
strsql3 = strsql3 + ",0 AS KASPIY,0 AS NOVPOS,0 AS DOVERIE,0 AS UZBEK,0 AS KAL5KA,0 AS HAS,0 as BUINAKSK,0 AS DERBENT "
strsql3 = strsql3 + "FROM " +наш перем+ " "
For i =  1  To nom
strfull3 = strsql3 + strplusstroka
List1.AddItem (strfull3)
Next i
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643537
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое "наш перем", почему я не вижу подстановки имени таблицы внутри цикла, зачем все это грузится в List1 и главное - где фоормирование собственно строки, содержащей выборки из всех таблиц, разделенных unoin all
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643546
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Open "C:\ostatok2\nastr1.txt" For Input As # 1 
Do Until EOF( 1 )
Line Input # 1 , strtxt
nom = nom +  1 
strtemp = "," + strtxt
strtemp2 = ", Sum(" + strtxt + ")"
strtemp3 = ",KOLVO AS " + strtxt
strsql = strsql + strtemp
strsql2 = strsql2 + strtemp2
strsql3 = strsql3 + strtemp3
strful3 = "SELECT KOD, NAME" + strsql3 + " FROM " + strtxt + " Union All "
Loop
Close # 1 
strsqlfull = " INSERT INTO ostatok.dbf (KOD,NAME" + strsql + ") "
strsqlfull2 = " SELECT KOD, Min(NAME)" + strsql2 + " From ("
не совсем понимаю зачем в цикле переменной придавать это значение ,в данном случае оно сотрется
а в данной конструкции
Код: plaintext
strful3 = strful3+"SELECT KOD, NAME" + strsql3 + " FROM " + strtxt + " Union All "
получится не понятно с чем и для чего как и в первом случае
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643553
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что у вас должно быть два цикла и оба с перебором имен таблиц.

В первом формируется три переменных: для инсерта, для агрегатного селекта и рыба для одной строки внутреннего селекта.

Во втором формируется внутренний селект из рыб, они склеиваются, вставляется имя таблицы, а так же один из нулей превращается в KOLVO
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643566
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
рыба
что имеете ввиду под этим
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643571
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0 AS DSH, 0 AS ALIEVA,0 AS SKLAD,0 AS SOVET, 0 AS KALIN18,0 AS YARAG,0 AS GAMZATOVA,0 AS KIROVA,0 AS GAGARINA,0 AS APTEKA29,0 AS LENINA104,0 AS LEKAR,0 AS MELOCH,0 AS YNIVER,0 AS REDUCTOR,0 AS PIROGOV,0 AS CB,0 AS KASPIY,0 AS NOVPOS,0 AS DOVERIE,0 AS UZBEK,0 AS KAL5KA,0 AS HAS,0 as BUINAKSK,0 AS DERBENT
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643584
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Do Until EOF( 1 )
Line Input # 1 , strtxt
nom = nom +  1 
strtemp = "," + strtxt
strtemp2 = ", Sum(" + strtxt + ")"
strtemp3 = ",0 AS " + strtxt
strsql = strsql + strtemp
strsql2 = strsql2 + strtemp2
strsql3 = strsql3 + strtemp3
For i =  0  To nom
strselect = strselect + "SELECT KOD, NAME" + strsql3 + " FROM " + strtxt + ".DBF Union All "
Next i
Loop
Close # 1 
насколько понял вы это имели ввиду,
но как один из нулей превратится в KOLVO еще в нужном месте я не пойму
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643587
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не говорил "два вложенных цикла"
Я говорил, два цикла, оба с перебором имен таблиц.
Пока не закончен первый цикл, для второго данные не готовы.

а вы какую-то ерунду написали.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643588
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
согласен )))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643589
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Open "C:\ostatok2\nastr1.txt" For Input As # 1 
Do Until EOF( 1 )
Line Input # 1 , strtxt
nom = nom +  1 
strtemp = "," + strtxt
strtemp2 = ", Sum(" + strtxt + ")"
strtemp3 = ",0 AS " + strtxt
strsql = strsql + strtemp
strsql2 = strsql2 + strtemp2
strsql3 = strsql3 + strtemp3
Loop
Close # 1 
Open "C:\ostatok2\nastr1.txt" For Input As # 1 
Do Until EOF( 1 )
Line Input # 1 , strtxt
strselect = strselect + "SELECT KOD, NAME" + strsql3 + " FROM " + strtxt + ".DBF Union All "
Loop
Close # 1 
strsqlfull = " INSERT INTO ostatok.dbf (KOD,NAME" + strsql + ") "
strsqlfull2 = " SELECT KOD, Min(NAME)" + strsql2 + " From ("
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643590
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
но как один из нулей превратится в KOLVO еще в нужном месте я не пойму
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643591
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
но как один из нулей превратится в KOLVO еще в нужном месте я не пойму

Вы забегаете вперед, но я вам открою тайну.
Есть такая замечательная функция - REPLACE.

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

А, нет, не забегаете, я не заметил сразу что код вы уже выложили.
НУ что, сами с replace сообразите, или подсказывать?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643594
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
думаю что получится ,
если что вы же здесь?)))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643595
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
единственно последний UNION ALL будет мешать)), надо его тоже replace )
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643596
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admесли что вы же здесь?)))

У вас примерно 20 минут...
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643601
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
тогда помогите ))
Код: plaintext
1.
2.
3.
4.
5.
Do Until EOF( 1 )
Line Input # 1 , strtxt
strselect = strselect + "SELECT KOD, NAME" + strsql3 + " FROM " + strtxt + ".DBF Union All "
strselect2 = Replace(strselect, "0 AS " + strtxt, "0", "KOLVO")
Loop
Close # 1 
по ходу примерно так только че то не работает
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643603
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
перемудрили

Код: plaintext
1.
2.
3.
4.
5.
Do Until EOF( 1 )
Line Input # 1 , strtxt
strselect = strselect + "SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt) + _
" FROM " + strtxt + ".DBF Union All "
Loop
Close # 1 
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643604
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
спасибо)))теперь конткретная программа получилась))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643614
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
а как вас зовут?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643671
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admа как вас зовут?

Путем публикации сообщения на этом форуме
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36643792
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
вроде задаю столько вопросов а имени не знаю))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644276
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
упорядочил таким образом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub Command2_Click()
On Error GoTo ado
Dim Conn As New ADODB.Connection
FileCopy "C:\ostatok2\empty\ostatok2.dbf", "C:\ostatok2\ostatok2.dbf"
Conn.Open "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir =C:\ostatok2\"
Conn.Execute "insert into ostatok2.dbf select * from ostatok.dbf order by NAME"
Conn.Close
FileCopy "C:\ostatok2\ostatok2.dbf", "C:\ostatok2\ostatok.dbf"
Kill ("C:\ostatok2\ostatok2.dbf")
Adodc1.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir = C:\ostatok2\"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select * from ostatok.dbf"
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
ado:
End Sub
а ниже конечный вид процедуры объединения
Код: 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.
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.
Private Sub Command1_Click()
On Error GoTo ado1
Do Until List1.ListCount =  0 
    List1.RemoveItem  0 
Loop
FileCopy "C:\ostatok2\empty\ostatok.dbf", "C:\ostatok2\ostatok.dbf"
If PathFileExists("C:\ostatok2\ostatok.DBF") =  0  Then
MsgBox ("Íåò ãëàâíîãî ôàéëà OSTATOK.DBF")
GoTo ado1
End If
If PathFileExists("C:\ostatok2\sklad.DBF") =  0  Then
MsgBox ("Íåò ãëàâíîãî ôàéëà SKLAD.DBF")
GoTo ado1
End If
Dim Conn As New ADODB.Connection
nom =  0 
Open "C:\ostatok2\nastr.txt" For Input As # 1 
Do Until EOF( 1 )
Line Input # 1 , strtxt
nom = nom +  1 
List2.AddItem (Str(nom))
List1.AddItem (strtxt)
strtemp = "," + strtxt
strtemp2 = ", Sum(" + strtxt + ")"
strtemp3 = ",0 AS " + strtxt
strsql = strsql + strtemp
strsql2 = strsql2 + strtemp2
strsql3 = strsql3 + strtemp3
Loop
Close # 1 
strsqlfull = " INSERT INTO ostatok.dbf (KOD,NAME" + strsql + ") "
strsqlfull2 = " SELECT KOD, Min(NAME)" + strsql2 + " From ("
kon = " ) AS T GROUP BY KOD "
Open "C:\ostatok2\nastr.txt" For Input As # 1 
Do Until EOF( 1 )
Line Input # 1 , strtxt
If PathFileExists("C:\ostatok2\" + strtxt + ".DBF") =  1  Then
If strtxt = "SKLAD" Then
strselect = strselect + "SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt) + _
" FROM " + strtxt + ".DBF "
Else
strselect = strselect + "SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt) + _
" FROM " + strtxt + ".DBF Union All "
End If
End If
Loop
Close # 1 
strselectfullfull = strsqlfull + strsqlfull2 + strselect + kon

Conn.Open "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir =C:\ostatok2\"
Conn.Execute strselectfullfull
Conn.Close

Adodc1.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=C:\ostatok2\;DefaultDir = C:\ostatok2\"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select * from ostatok.dbf"
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1

ado1:
End Sub
ниже содержание файла nastr.txt
DSH
ALIEVA
KALIN18
YARAG
GAMZATOVA
KIROVA
GAGARINA
APTEKA29
LEN104
LEKAR
MELOCH
YNIVER
REDUCTOR
PIROGOV
CB
KASPIY
NOVPOS
DOVERIE
UZBEK
KAL5KA
HAS
BUINAKSK
DERBENT
SKLAD
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644309
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неожиданно....
Код: plaintext
1.
2.
Do Until List1.ListCount =  0 
    List1.RemoveItem  0 
Loop
А метод Clear не пробовали? Помогает.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644313
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я вас сюда разве еще не посылал?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644315
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proнеожиданно....
Код: plaintext
1.
2.
Do Until List1.ListCount =  0 
    List1.RemoveItem  0 
Loop
А метод Clear не пробовали? Помогает.
надо попробовать))
автора я вас сюда разве еще не посылал?
надо но лень че то бывает)))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644317
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с этой конструкцией:
Код: plaintext
1.
2.
3.
4.
5.
6.
If strtxt = "SKLAD" Then
strselect = strselect + "SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt) + _
" FROM " + strtxt + ".DBF "
Else
strselect = strselect + "SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt) + _
" FROM " + strtxt + ".DBF Union All "
End If
категорически не согласен!!!!!!!
Ну зачем же мы тут мучались всю субботу, формировали уровень абстракции, ради того, чтобы вы все вот этим испортили???
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644321
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proс этой конструкцией:
Код: plaintext
1.
2.
3.
4.
5.
6.
If strtxt = "SKLAD" Then
strselect = strselect + "SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt) + _
" FROM " + strtxt + ".DBF "
Else
strselect = strselect + "SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt) + _
" FROM " + strtxt + ".DBF Union All "
End If
категорически не согласен!!!!!!!
Ну зачем же мы тут мучались всю субботу, формировали уровень абстракции, ради того, чтобы вы все вот этим испортили???
я вам же говорил что с последним Union All что то надо было сделать
решил так , обязательным условием остается в таком случае чтобы таблица SKLAD
была последней в списке NASTR.TXT
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644329
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admя вам же говорил что с последним Union All что то надо было сделать
решил так , обязательным условием остается в таком случае чтобы таблица SKLAD
была последней в списке NASTR.TXT

То, чем мы с вами занимались, называется введеним уровня абстракции (хотя я и предлагал вам на это забить, но раз вы взялись, нужно довести до ума). То есть мы абстрагировали программу от списка филиалов. То есть программа должна работать со списком из любого количества и любых наименований. А список находится на другом уровне абстрации и может быть использован не только в этой программе, но и в куче других мест.

Ну и зачем же уповать на то, что глупая секретарша не забъет еще один филиал после склада или чуть более умному сисадмину не захочется переименовать файл (понимая, что есть файл с настройками, в котором перечислены все файлы филиалов, и если там поменять настройку - программа продолжит нормально работать; кстати, такой подход - управление со стороны данных, в принципе очень хорош для создания масштабируемых программ.)

Так что уж будьте любезны, решите этот вопрос не привязываясь к названиям файлов.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644330
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще:
Код: plaintext
On Error GoTo ado1
После метки неплохо бы добавить:

Код: plaintext
1.
ado1:
MsgBox "Произошла ошибка при работе с базой данных."+vbCr+vbCr+Err.Description, vbCritical

Только
Код: plaintext
GoTo ado1
придется изменить. Либо еще одну метку, либ просто Exit Sub
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644334
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТак что уж будьте любезны, решите этот вопрос не привязываясь к названиям файлов.

Это вам для затравки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim Comma As String, i As Integer, Res As String
Comma = ""
Res = ""
For i =  1  To  5 
  Res = Res + Comma + CStr(i)
  Comma = ","
Next
MsgBox Res

Хотя можно с помощью Left$ и Len
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644335
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admавтора я вас сюда разве еще не посылал?
надо но лень че то бывает)))

Не ленитесь. Больше времени потеряете на отладке.
Заодно из лени переделаете:
Код: plaintext
1.
2.
3.
4.
5.
strtemp = "," + strtxt
strtemp2 = ", Sum(" + strtxt + ")"
strtemp3 = ",0 AS " + strtxt
strsql = strsql + strtemp
strsql2 = strsql2 + strtemp2
strsql3 = strsql3 + strtemp3
в
Код: plaintext
1.
2.
strsql = strsql + "," + strtxt
strsql2 = strsql2 + ", Sum(" + strtxt + ")"
strsql3 = strsql3 + ",0 AS " + strtxt
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644337
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
авторТак что уж будьте любезны, решите этот вопрос не привязываясь к названиям файлов.

тогда надо будет сканировать папку с файлами(на наличие dbf) и добавлять найденные в текстовый
файл(так как запрос будет выдавать ошибку из за отсутствия хотя бы одной таблицы, потому что бывает что не всегда все контрагенты скидывают файл с остатками)
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644342
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admзапрос будет выдавать ошибку из за отсутствия хотя бы одной таблицы

А он и так будет.
Вы же забыли If PathFileExists в первом цикле.

А если поставить If PathFileExists в первом цикле, то с какой стати запрос будет выдавать ошибку???
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644349
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proaduka05admзапрос будет выдавать ошибку из за отсутствия хотя бы одной таблицы

А он и так будет.
Вы же забыли If PathFileExists в первом цикле.

А если поставить If PathFileExists в первом цикле, то с какой стати запрос будет выдавать ошибку???
точно)))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644354
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProShocker.ProТак что уж будьте любезны, решите этот вопрос не привязываясь к названиям файлов.

Это вам для затравки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim Comma As String, i As Integer, Res As String
Comma = ""
Res = ""
For i =  1  To  5 
  Res = Res + Comma + CStr(i)
  Comma = ","
Next
MsgBox Res

Хотя можно с помощью Left$ и Len
если использовать эту конструкцию для union all
то проблема в том что он в конце строки стоит
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644356
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admесли использовать эту конструкцию для union all
то проблема в том что он в конце строки стоит

Думайте внимательно.
В чем разница между числами, разделенными запятыми, и запросами, разделенными "Union All"-ами?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644375
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proaduka05admесли использовать эту конструкцию для union all
то проблема в том что он в конце строки стоит

Думайте внимательно.
В чем разница между числами, разделенными запятыми, и запросами, разделенными "Union All"-ами?
Код: plaintext
1.
2.
3.
4.
5.
6.
strunion = ""
For i =  0  To List1.ListCount -  1 
 strtxt = List1.List(i)
strselect = strselect + strunion + "SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt) + _
" FROM " + strtxt + ".DBF "
strunion = " Union All "
Next
а ведь получилось)))
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644378
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admа ведь получилось)))

Ну вот, теперь, когда вы освоили простенькую обработку строк, можете взять домашнее задание: придумать, как собрать это запрос в одном цикле чтения файла, а не в двух
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36644383
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proaduka05admа ведь получилось)))

Ну вот, теперь, когда вы освоили простенькую обработку строк, можете взять домашнее задание: придумать, как собрать это запрос в одном цикле чтения файла, а не в двух
буду думать))) спасибо
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646213
Фотография 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.
fl =  0 
Open "C:\ostatok2\nastr.txt" For Input As # 1 
For i =  0  To nom
Do Until EOF( 1 )
If fl =  0  Then
Line Input # 1 , strtxt
If PathFileExists("C:\ostatok2\" + strtxt + ".DBF") =  1  Then
nom = nom +  1 
List2.AddItem (Str(nom))
List1.AddItem (strtxt)
strsql = strsql + "," + strtxt
strsql2 = strsql2 + ", Sum(" + strtxt + ")"
strsql3 = strsql3 + ",0 AS " + strtxt
End If
End If
Loop
fl =  1 
strtxt2 = List1.List(i)
strselect = strselect + strunion + "SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt2, "KOLVO AS " + strtxt2) + _
" FROM " + strtxt2 + ".DBF "
strunion = " Union All "

Next
fl =  0 
Close # 1 
сделал так но ошибку найти не могу
не работает
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646218
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
For i =  0  To nom

а чему равно nom, а?

даю подсказку - вложенных циклов там не требуется

А вообще, надо ли вам выполнять это д/з? может чего лучше полезное к программе приделаете, ведь она ж рабочая...
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646289
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
уже приделал))
а это д/з ntthm покоя не дает)
пробовал так но он естественно добавляет лишнюю строку
Код: plaintext
1.
2.
3.
4.
5.
6.
nom =  1 
For i =  0  To nom
Do Until EOF( 1 )
If fl =  0  Then
Line Input # 1 , strtxt
If PathFileExists("C:\ostatok2\" + strtxt + ".DBF") =  1  Then
nom = nom +  1 
также пробовал так в этом случае наоборот переменную не вставляет (ошибка From .DBF не найден .DBF)
Код: plaintext
1.
2.
3.
4.
5.
6.
nom =  0 
For i = - 1  To nom
Do Until EOF( 1 )
If fl =  0  Then
Line Input # 1 , strtxt
If PathFileExists("C:\ostatok2\" + strtxt + ".DBF") =  1  Then
nom = nom +  1 
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646295
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему внешний цикл вы хотите выполнить именно ДВА раза? откуда эта цифра в алгоритме?
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646310
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
я его такое количеcтво раз хочу сделать чему равно nom, чтобы в нижнюю переменную с listbox внести данные.
строки при внутреннем цикле заносятся в listbox. только вот с этим nom не допру как сделать
Код: plaintext
1.
2.
3.
strtxt2 = List1.List(i)
strselect = strselect + strunion + "SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt2, "KOLVO AS " + strtxt2) + _
" FROM " + strtxt2 + ".DBF "
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646341
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
если делать так то работает , но не понимаю почему
Код: plaintext
1.
2.
3.
4.
5.
6.
For i =  0  To nom +  6 
Do Until EOF( 1 )
Line Input # 1 , strtxt
If PathFileExists("C:\ostatok2\" + strtxt + ".DBF") =  1  Then
If fl <  1  Then
nom = nom +  1 
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646415
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый алгоритм у вас делал два прохода по таблице имен файлов, в этот раз вы уже хотите наворотить несколько проходов, непонятно зачем....
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646427
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПервый алгоритм у вас делал два прохода по таблице имен файлов, в этот раз вы уже хотите наворотить несколько проходов, непонятно зачем....
в первом алгоритме в строке
Код: plaintext
1.
2.
strtxt2 = List1.List(i)
strselect = strselect + strunion + "SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt2, "KOLVO AS " + strtxt2) + _
" FROM " + strtxt2 + ".DBF "
он брал первую строку и все
так вот переменная nom увеличивается во внутреннем цикле
Код: plaintext
 nom=nom+ 1 
только видимо в конструкции
Код: plaintext
For i =  0  To nom
в переменной nom должно быть постоянное значение
а не динамичное
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646437
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, свой алгоритм примерно обрисую.

Есть некая переменная (в вашем случае strselect), в которой мы формируем своеобразный "квадрат". По горизонтали мы наращиваем список полей через запятую, а по вертикали - склеиваем эти самые горизонатльные строки через union all.

Сейчас мы это делаем в двух последовательных циклах. В первом цикле "отращиваем" квадрат вправо, во втором - вниз. Хочется сделать в одном цикле, как? Отращивание квадрата вниз у нас вопроса не вызывает, там просто идет добавление в конец переменной, а как одновременно отращивать его вправо? Ведь первый раз должна отращиваться одна строка, во второй - две строки, в третий - три и т.п.

Помогут маркеры и функция Replace. Нам нужно выбрать в качестве маркера какой-нибудь текст, который точно не встретится ни в запросе, ни в названии файлов. Пусть это будет "%". Разместим его в концах наращиваемых вправо строк и будем наращивать за счет этого маркера, просто заменяя его на то, чем мы наращиваем строки.

Пример, в какой-то момент строка квадрата (часть переменной) выглядит так:
Код: plaintext
1.
2.
3.
SELECT KOD, NAME, KOLVO AS DSH,  0  AS ALIEVA, 0  AS SKLAD, 0  AS SOVET%
UNION ALL
SELECT KOD, NAME,  0  AS DSH, KOLVO AS ALIEVA, 0  AS SKLAD, 0  AS SOVET%
...
Проделываем
Код: plaintext
Replace(strselect,"%",",0 AS KALIN18%")
получаем
Код: plaintext
1.
2.
3.
SELECT KOD, NAME, KOLVO AS DSH,  0  AS ALIEVA, 0  AS SKLAD, 0  AS SOVET, 0  AS KALIN18%
UNION ALL
SELECT KOD, NAME,  0  AS DSH, KOLVO AS ALIEVA, 0  AS SKLAD, 0  AS SOVET, 0  AS KALIN18%
...

То бишь одной просто командой мы прирастили вправо все четыре строки.
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646491
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
а как же тогда с этим куском кода
Код: plaintext
 Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt)
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646495
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
3.
4.
5.
6.
strsql3 = strsql3 + ",0 AS " + strtxt + "%"
strselect = Replace(strselect, "%", ",0 AS " + strtxt)
strselect = strselect + strunion + " SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt) + _
" FROM " + strtxt + ".DBF "
strunion = " Union All "
MsgBox (strselect)
сделал так не работает , буду думать завтра)
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646711
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
а как же тогда с этим куском кода
Код: plaintext
 Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt)


а он не нужен теперь
нужная строка формируется сразу
...
Рейтинг: 0 / 0
Подскажите метод побыстрее
    #36646713
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
Код: plaintext
1.
2.
3.
4.
5.
6.
strsql3 = strsql3 + ",0 AS " + strtxt + "%"
strselect = Replace(strselect, "%", ",0 AS " + strtxt)
strselect = strselect + strunion + " SELECT KOD, NAME" + Replace(strsql3, "0 AS " + strtxt, "KOLVO AS " + strtxt) + _
" FROM " + strtxt + ".DBF "
strunion = " Union All "
MsgBox (strselect)
сделал так не работает , буду думать завтра)

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


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