Вы можете использовать метод setArray, упомянутый в , этот javadoc :
PreparedStatement statement = connection.prepareStatement("Select * from emp where field in (?)");
Array array = statement.getConnection().createArrayOf("VARCHAR", new Object[]{"E1", "E2","E3"});
statement.setArray(1, array);
ResultSet rs = statement.executeQuery();
Вы должны вызвать функцию DoEvents-Function в цикле, чтобы передать управление операционной системе для перерисовки вашего GUI-интерфейса и для обработки любых других оконных сообщений, которые могут потребовать обработки. При этом приложение не будет помечено как «Не отвечает» в диспетчере задач и в строке заголовка.
Do Until rs.EOF = True
[...]
rs.MoveNext
DoEvents
Loop
Существует небольшая компромиссная производительность. Если не вызывать DoEvents, общее время выполнения для цикла будет немного короче, но Access ничего не сделает, а затем обработает ваш цикл. Поэтому кажется, что он не отвечает.
Как указывали другие, вы можете использовать DoEvents для освобождения процессора для выполнения других действий перед продолжением. Когда я использую DoEvents в цикле, я использую счетчик.
Dim iCounter as Integer
Do Until
' some code here
iCounter=iCounter+1
If iCounter = 100 then
DoEvents
iCounter=0
End if
Loop
Это позволяет DoEvents запускать слишком часто, а ваш общий код замедляется. Отрегулируйте счетчик на любую итерацию, которая вам подходит.
Это не лучший подход для таких изменений с циклом набора записей.
, например
UPDATE tblGuardians
SET FirstName = Trim(StrConv(FirstName, 3))
WHERE StrComp(FirstName, Trim(StrConv(FirstName, 3)), 0) <> 0
, и то же самое для LastName
.
Используется вместо StrComp
вместо простого <>
, потому что последнее нечувствительно к регистру. Третий параметр 0
= vbBinaryCompare
.