Метки TextFields обычно заполняются свойством source
. Если вы хотите использовать компонент <ShowController>
с пользовательским макетом, я предлагаю вам создать другой пользовательский компонент и использовать его внутри <Show>
, <ShowView>
или <SimpleShowLayout>
.
Я обернул поля компонентом SimpleForm
, чтобы можно было показывать их метки и скрывать панель инструментов с пользовательскими CardActions
.
Пример:
const FormToolbar = () => (
<CardActions style={{display: 'none'}}>
</CardActions>
);
const FormDiv = ({controllerProps, ...props}) => (
<Grid container spacing={24}>
<Grid item xs={12}>
<SimpleForm toolbar={<FormToolbar/>}>
<TextField {...props} record={controllerProps.record} source="name"/>
</SimpleForm>
</Grid>
</Grid>
);
const OrderShow = props => (
<ShowController {...props} title="Order">
{controllerProps =>
<Show actions={<ShowActions pageType="show" />} {...props} {...controllerProps}>
<SimpleShowLayout>
<FormDiv controllerProps={controllerProps} />
</SimpleShowLayout>
</Show>
}
</ShowController>
);
export default OrderShow;
Почти всегда лучше избежать ошибок, вместо того, чтобы обработать их. Например:
Set objexcel = CreateObject("excel.Application")
objexcel.Visible = True
'On Error GoTo Openwb '
'wbExists = False '
If Dir("C:\REPORT3.xls") = "" Then
objexcel.Workbooks.Add
Set wbexcel = objexcel.ActiveWorkbook
Set objSht = wbexcel.Worksheets("Sheet1")
Else
Set wbexcel = objexcel.Workbooks.Open("C:\REPORT3.xls")
Set objSht = wbexcel.Worksheets("Sheet1")
End If
objSht.Activate
'wbExists = True '
On error goto 0
дайте руку Visual Basic для ошибочной обработки (в общем окне сообщения)
On error goto label
перенаправит Ваш код для маркировки:
On error resume next
проигнорирует ошибку и продолжится
Resume next
перенаправьте код к следующей строке после того, как ошибка будет повышена
это означает что комбинации инструкций такой как
On Error goto 0
...
On Error goto 0
не имейте смысла
И если Вы хотите перенаправить "на ошибке", инструкция необходимо будет сделать это этот путь:
Do While Not rs.EOF
On Error Resume Next
rs2.Open strsql
On error Goto 0
rs2.moveNext
Loop
Если Вы хотите перенаправить ошибку к маркировке (для обработки или безотносительно) и затем вернуться к коду, где ошибка произошла, необходимо записать что-то как:
On error goto label
...
...
On error goto 0
exit sub (or function)
label:
....
resume next
end function
Но я действительно советую Вам быть более строгими на Вашем управлении обработкой ошибок. Необходимо сначала смочь сделать что-то как этот:
Set objexcel = CreateObject("excel.Application")
objexcel.Visible = True
On Error GoTo error_Treatment
wbExists = False
Set wbexcel = objexcel.Workbooks.Open("C:\REPORT3.xls")
Set objSht = wbexcel.Worksheets("Sheet1")
objSht.Activate
wbExists = True
On error GoTo 0
Set db = DBEngine.opendatabase("C:\book.mdb")
Set rs = db.OpenRecordset("records")
Set rs2 = CreateObject("ADODB.Recordset")
rs2.ActiveConnection = CurrentProject.Connection
For Each tdf In CurrentDb.TableDefs
....
'there are a number of potential errors here in your code'
'you should make sure that rs2 is closed before reopening it with a new instruction'
'etc.'
Next tdf
Exit sub
error_treatment:
SELECT Case err.number
Case **** '(the err.number raised when the file is not found)'
objexcel.Workbooks.Add
Set wbexcel = objexcel.ActiveWorkbook
Set objSht = wbexcel.Worksheets("Sheet1")
Resume next 'go back to the code'
Case **** '(the recordset cannot be opened)'
....
....
Resume next 'go back to the code'
Case **** '(whatever other error to treat)'
....
....
Resume next 'go back to the code'
Case Else
debug.print err.number, err.description '(check if .description is a property of the error object)'
'your error will be displayed in the immediate windows of VBA.'
'You can understand it and correct your code until it runs'
End select
End sub
Следующий шаг должен будет ожидать ошибки в Вашем коде так, чтобы допускать ошибку объект не был повышен. Можно, например, записать родовую функцию как этот:
Public function fileExists (myFileName) as Boolean
Можно затем использовать в своих интересах эту функцию в коде путем тестирования существования xls файла:
if fileExists("C:\REPORT3.xls") Then
Set wbexcel = objexcel.Workbooks.Open("C:\REPORT3.xls")
Else
objexcel.Workbooks.Add
Set wbexcel = objexcel.ActiveWorkbook
Endif
Set objSht = wbexcel.Worksheets("Sheet1")
objSht.Activate
Вам больше не нужна Ваша wbExist переменная...
Таким же образом необходимо ожидать случай, где recordset не имеет никаких записей. Запись RS. MoveFirst прежде, чем протестировать его мог повысить ошибку. Необходимо затем записать
If rs.EOF and rs.BOF then
Else
rs.moveFirst
Do while not rs.EOF
rs.moveNext
Loop
Endif
попробовать
On Error Goto 0
Поскольку дальнейшая справка смотрит здесь: http://msdn.microsoft.com/en-us/library/bb258159.aspx
Необходимо очистить ошибку. Попытайтесь вставить этот код:
If Err.Number > 0 Then
Err.Clear
End If
Можно также использовать Err. Число для обработки определенных ошибочных случаев.