powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подскажите метод побыстрее
25 сообщений из 160, страница 6 из 7
Подскажите метод побыстрее
    #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
25 сообщений из 160, страница 6 из 7
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подскажите метод побыстрее
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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